PHP MYSQL Join Query.ВЫБЕРИТЕ ГДЕ И В ИЛИ Логическая ошибка - PullRequest
0 голосов
/ 03 марта 2011

Привет всем.Я думаю, что у меня логическая ошибка в моем QryВывод правильный, но в тройках.Я долго смотрел на это и не видел этого.Может кто-то пролить свет на это?Спасибо !!

Также хотел бы добавить эту информацию.

  • $ userid = 1
  • $ UserIDAList = (1,1,6)
  • $ UserIDBList = (2,3,1)

PHP-код:

$result  = mysql_query("SELECT TBL_ContactsList.ContactID, TBL_ContactName.FirstName FROM TBL_ContactsList, TBL_ContactName WHERE ((TBL_ContactName.NameID != $userid) AND (TBL_ContactsList.ContactID != $userid)) AND ((TBL_ContactName.NameID IN ($UserIDAList) OR TBL_ContactName.NameID IN $UserIDBList)))");

while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
    printf ("ID: %s  Name: %s", $row[0], $row[1]);
    echo "<br/>";
}

Только SQL-запрос (читабельность):

SELECT TBL_ContactsList.ContactID, TBL_ContactName.FirstName 
FROM TBL_ContactsList, TBL_ContactName 
WHERE ((TBL_ContactName.NameID != $userid) AND (TBL_ContactsList.ContactID != $userid)) 
AND ((TBL_ContactName.NameID IN ($UserIDAList) OR TBL_ContactName.NameID IN $UserIDBList)))

Вывод:

ID: 2 Name: Joe
ID: 3 Name: Joe
ID: 4 Name: Joe
ID: 2 Name: Jimbo
ID: 3 Name: Jimbo
ID: 4 Name: Jimbo
ID: 2 Name: Mike
ID: 3 Name: Mike

РЕДАКТИРОВАТЬ: Вот то, что я в конечном итоге использовать.(здесь не могу определить отступ.)

Но сейчас я пропускаю запись из БД.

$result = mysql_query("<br> SELECT cl.ContactID, cn.FirstName<br> FROM TBL_ContactName AS cn<br> INNER JOIN TBL_ContactsList AS cl<br> ON cl.ContactID = cn.NameID<br> WHERE<br> cn.NameID != $userid<br> AND (<br> cn.NameID IN ($UserIDBList) OR cn.NameID IN ($UserIDAList)<br> )<br> "); Вывод выглядит следующим образом.
ID: 2 Имя: Джо
ID: 3 Имя: Джимбо

Но когда я ставлю LEFT JOIN, я получаю это.Закрыть, но все еще отсутствует ID.
ID: 2 Имя: Джо
ID: 3 Имя: Джимбо
ID: Имя: Майк

Есть идеи ??Спасибо!

Ответы [ 3 ]

1 голос
/ 03 марта 2011

Вы должны сделать отступ и сократить свой SQL для лучшей читаемости

$result = mysql_query("
  SELECT cl.ContactID, cl.FirstName
  FROM TBL_ContactsList cl
  JOIN TBL_ContactName cn
  WHERE (
    cn.NameID != $userid AND
    cl.ContactID != $userid
  ) AND (
    cn.NameID IN ($UserIDAList) OR 
    cn.NameID IN ($UserIDBList)
  )
");
1 голос
/ 03 марта 2011

Если я правильно понял вашу структуру SQL, то изменение SQL, вероятно, должно исправить это. По крайней мере, это правильное использование.

$result=mysql_query("SELECT cl.ContactID, cn.FirstName FROM TBL_ContactsList cl INNER JOIN TBL_ContactName cn ON cn.NameID=cl.ContactID WHERE cn.NameID != $userid AND (CN.NameID IN ($UserIDAList) OR CL.NameID IN ($UserIDBList))");
0 голосов
/ 03 марта 2011

Пожалуйста, оставьте отзыв, если у вас получится:

SELECT cl.ContactID, cn.FirstName 
  FROM TBL_ContactName AS cn 
  JOIN TBL_ContactsList as cl
    ON cn.NameID = cn.ContactID
  WHERE cn.NameID != $userid
    AND (cn.NameID IN ($UserIDAList) OR cn.NameID  IN ($UserIDBList));
...