IF Statement не работает правильно -> Сравнение двух таблиц и возвращаемое значение - PullRequest
0 голосов
/ 07 марта 2012

У меня следующая проблема: я хочу сравнить две таблицы и посмотреть, совпадают ли в обеих таблицах. Если у обоих одинаковое число, то я хочу обновить первую таблицу и вернуть значение «Он в базе данных», а если нет, то наоборот.

Вот что я делаю:

<?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);

?>

В данный момент он всегда возвращает первое эхо (даже если оно не соответствует действительности) и, следовательно, добавляет к каждому числу одно и то же значение.

1 Ответ

1 голос
/ 07 марта 2012

Вы выполняете левое внешнее объединение в своем запросе, это означает, что результат будет содержать все строки таблицы Отношение , независимо от того, есть ли у них соответствующая строка в Контакты .

Часть 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...