PHP MYSQL加入查询。 SELECT WHERE AND IN OR逻辑错误

时间:2011-03-03 07:12:50

标签: php mysql select join where

嘿所有人。我想我的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-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)))

输出:

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

编辑:这是我最终使用的。 (在这里找不到缩进。)

但现在我错过了db的一个条目。

$result = mysql_query("
SELECT cl.ContactID, cn.FirstName
FROM TBL_ContactName AS cn
INNER JOIN TBL_ContactsList AS cl
ON cl.ContactID = cn.NameID
WHERE
cn.NameID != $userid
AND (
cn.NameID IN ($UserIDBList) OR cn.NameID IN ($UserIDAList)
)
");
输出看起来像这样 ID:2姓名:乔
ID:3姓名:Jimbo

但是当我把LEFT JOIN放进去的时候我就明白了。关闭但仍缺少身份证明 ID:2姓名:乔
ID:3姓名:Jimbo
ID:姓名:Mike

任何想法?谢谢!

3 个答案:

答案 0 :(得分:1)

如果我正确地获得了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))");

答案 1 :(得分:1)

您应该缩进并缩短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)
  )
");

答案 2 :(得分:0)

请提供反馈,如果这对您有用:

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