首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何检查我的sql表中的重复条目?

如何检查我的sql表中的重复条目?
EN

Stack Overflow用户
提问于 2019-05-30 23:31:18
回答 2查看 80关注 0票数 0

我是编程新手,还在学习。我在mySQL中创建了一个数据库来存储一家虚构餐厅的预订。我得到了我的网站的形式和运行,当您输入您的信息(电子邮件/需要座位/日期/小时),它注册并成功地输入到数据库中。但是现在我正在检查数据库中是否有两个条目,然后向我的客户发送一条消息说:“对不起,那张桌子已经预订了,请选择其他时间或日期。”

为了简单起见,我现在想要检查的是,如果有问题的“座位表”已经在数据库中超过2次,如果第三次尝试,我希望出现错误消息,但我似乎不知道如何检查我的sql,这是我现在有的代码…我检查的列是座位表" 5-8“people,我的选择是1-2,3-4和5-8。5-8是sql表列中写为"text“的内容

代码语言:javascript
复制
require_once("config.php.inc");

$idConnexion = new mysqli($serveur, $utilisateur, $motDePasse, $bd, $port);

if ($idConnexion->connect_error) {
    die('Erreur de connexion (' . $idConnexion->connect_errno . ') ' .$idConnexion->connect_error);
}

$requete = $idConnexion->query("SELECT * FROM tables") or die("La requete a echouee!");
$tableau = $requete->fetch_array();
$heure_res = $tableau["heure"];
$date_res = $tableau["date_res"];
$nombre_res = $tableau["nombre_personnes"];

if (($tableau = $requete->fetch_array()) !=FALSE) {
    $nombre_table = $nombre_res == "5-8";
    if (count($nombre_table) >= 2) {
        echo "Il n'y a plus de place, choisissez une autre heure ou date.";
    } else {
        $resultats = $idConnexion->query("INSERT INTO `tables` SET email = '$_GET[email]', nombre_personnes ='$_GET[nombre_personne]', date_res = '$_GET[date_res]', heure = '$_GET[heure_preference]'") or die("La requête a échouée! : (" . $idConnexion->errno . ") " . $idConnexion->error);
        $message = "L'ajout de la réservation a été fait avec succès!";
        include("succes_interface.php");
    }
}

获取数组后,我尝试查看"5-8“是否在数据库中超过两次,以返回错误,如果小于2,则PHP可以继续并将保留添加到数据库中。

我真的希望我问的问题是对的,我已经在StackOverflow上搜索了答案,但没有任何运气。

提前谢谢你。

EN

回答 2

Stack Overflow用户

发布于 2019-05-31 00:48:06

首先,您的代码似乎只查看了SELECT语句返回的第一行。第二,下面的语句:

代码语言:javascript
复制
$nombre_table = $nombre_res == "5-8";

$nombre_table赋值TrueFalse。您不能对这样的值应用PHP 函数,因此下一条语句将抛出一个警告。在任何情况下,您都不会计算"5-8“在nombre_personnes.列中出现的次数要做到这一点,可以使用如下查询:

代码语言:javascript
复制
$requete = $idConnexion->query("SELECT count(*) AS cnt from tables WHERE nombre_personnes = '5-8'");

当然,在读取计数和插入新行之间,有没有可能是另一个进程修改了数据库,使得您读取的计数不再是最新的,而您最终仍然出现了太多的“5-8”?在继续操作之前,您可能需要首先锁定该表以防止写入。

票数 0
EN

Stack Overflow用户

发布于 2019-05-30 23:40:10

您必须在表中放入一个ID (ID int NOT NULL AUTO_INCREMENT,),这样您的表才能有一个id来保证每个表都是惟一的。当有人尝试预订时,您将获得该表的id,并将其与预订进行比较,因此您不能拥有两个相同的表。

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56381244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档