我有以下问题:我想比较两个表,看看两者中的数字是否相同。如果in和in都是相同的数字,那么我想更新第一个表并返回值"He在数据库中",如果不是,则反之亦然。
我是这样做的:
<?php
$DB_HostName = "localhost";
$DB_Name = "db";
$DB_User = "user";
$DB_Pass = "";
$DB_Table = "Relation";
$DB_Table2 = "Contacts";
$con = mysql_connect($DB_HostName,$DB_User,$DB_Pass) or die (mysql_error());
mysql_select_db($DB_Name,$con) or die(mysql_error());
$result = mysql_query("SELECT User FROM $DB_Table left join $DB_Table2 on User = Number", $con);
if ($result) {
if (mysql_num_rows($result) > 0) {
echo "This user is already in database";
mysql_query("update $DB_Table2 SET Echo ='http://activity.24.eu/images /thumbsup.png'");
}
else {
echo "This user isn't in the database";
mysql_query("update $DB_Table2 SET Echo ='http://activity.24.eu/images/thumbsdown.png'");
}
}
mysql_close($con);
?>
目前,它总是返回第一个回波(即使不是真的),因此向每个数字添加相同的值。
在查询中执行左外部联接,这意味着结果将包含表Relation的所有行,无论它们在Contacts中是否有相应的行。
部分on User = Number
属于联接,并描述哪些列构成关系。如果这些是你想要比较的属性,你应该把它们放在WHERE部分:
SELECT User FROM Relation left join Contacts on (Relation.field = Contacts.field) WHERE User = Number
顺便说一句,您应该注意,放入SQL字符串中的所有变量都经过了正确的转义,以防止SQL注入。
编辑:根据评论,我试图举一个例子:
如果你想要一个所有用户的列表和相应的联系人。号码然后写:
SELECT Relation.User FROM Relation INNER JOIN Contacts ON (Relation.User = Contacts.Number)
结果将是一个列表行,每行包含一个Relation.User值。现在,您可以循环遍历这些行,并生成一个字符串,如8,77,81。
要更新你的表,你可以写2个这样的更新:
UPDATE Contacts SET Echo = 'thumbsup' WHERE Contacts.Number IN (8,77,81);
UPDATE Contacts SET Echo = 'thumbsdown' WHERE Contacts.Number NOT IN (8,77,81);