MYSQL加入不按预期工作

时间:2011-12-13 10:39:48

标签: mysql join left-join

我正在尝试创建一个连接语句来解决我的问题,但无法理解它。

我是新加入的声明,所以如果我的sql声明是废话,请耐心等待。

我有两张桌子,一张是用户询问有关待售物品的问题的表格。

其次是用户提出问题的项目表。

名为questions的表1由question_ref, questioner_user_ref, item_ref, seller_ref, question_text, timestamp

组成
questions
===========
+--------------+--------------------+---------+-----------+--------------+----------+
| question_ref |questioner_user_ref |item_ref |seller_ref |question_text |timestamp |
+--------------+--------------------+---------+-----------+--------------+----------+

名为my_item_comments的表2由questioner_ref, item_ref, last_question_ref

组成
my_item_comments
===========
+---------------+---------+------------------+
|questioner_ref |item_ref |last_question_ref |
+---------------+---------+------------------+

我已设置表格2以跟踪用户提出问题的项目,以便在其他人向卖方询问问题或卖家回答时通知他们。

所以我想创建一个问题记录集 一个)。有人回答了有关用户正在销售的商品的问题 B)。卖家已回复用户提出的问题,
C)。第三个用户询问了有关用户也询问过问题的项目的问题。

有点像facebook的评论系统,在这里您可以了解人们对您评论过的状态所做的评论。

所以我当前的sql语句如下

$user_ref= current logged in user


  $sql=mysql_query("
    SELECT * FROM questions
    LEFT JOIN my_item_comments
    ON questions.item_ref=my_item_comments.item_ref
    WHERE questions.questioner_user_ref!='$user_ref'
    AND (questions.seller_ref='$user_ref' OR questions.item_ref=my_item_comments.item_ref
    ORDER BY timestamp DESC");

结果不起作用,我认为这是因为OR questions.item_ref=my_item_comments.item_ref,但对于我的生活,我无法解决这个问题。

非常感谢任何帮助,即使这意味着在表格中使用更多表格或新字段重构我的数据库。

事先感谢,巴里

2 个答案:

答案 0 :(得分:1)

SELECT * FROM questions
LEFT JOIN my_item_comments ON questions.item_ref=my_item_comments.item_ref
WHERE 
   questions.questioner_user_ref != '$user_ref' AND 
   (questions.seller_ref='$user_ref' OR questions.item_ref=my_item_comments.item_ref)
ORDER BY timestamp DESC

我认为你错过了)来封闭OR子句(在上面的示例中我添加了它)

答案 1 :(得分:0)

您应该尝试提高自己和我们的可读性,以便更容易调试,更方便我们帮助您: - )

$q = "
    SELECT * 
      FROM questions
RIGHT JOIN my_item_comments ON questions.item_ref = my_item_comments.item_ref
     WHERE questions.questioner_user_ref != '".$user_ref."'
       AND (    questions.seller_ref = '".$user_ref."' 
            OR  questions.item_ref=my_item_comments.item_ref
            )
  ORDER BY timestamp DESC";

$rs = mysql_query($q);

最好只是带有虚拟数据的查询

    SELECT * 
      FROM questions
RIGHT JOIN my_item_comments ON questions.item_ref = my_item_comments.item_ref
     WHERE questions.questioner_user_ref != 'dummy_ref'
       AND (    questions.seller_ref = 'dummy_ref' 
            OR  questions.item_ref=my_item_comments.item_ref
            )
  ORDER BY timestamp DESC

为您的查询尝试right join。左连接确实会获得所有行。