2011-12-13 83 views
2

我試圖創建一個連接語句來解決我的問題,但不能讓我的頭周圍。MYSQL聯接未正常工作

我是新加入的語句所以請多多包涵,如果我的SQL語句是無稽之談。

我有兩個表,一個是用戶在何處問項出售問題,問題的表。

二是用戶已經問了一個問題關於項目表。由questioner_ref, item_ref, last_question_ref

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

表一個叫questionsquestion_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的我已經設置了表中的兩個來跟蹤用戶已問問題的項目所以當別人詢問賣家問題或賣家回答時可以通知他們。

所以我想創建的問題進行記錄是 一)。有人回答了關於用戶銷售的物品的問題 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其原因,但對我的生活,我不能工作了。

任何幫助將不勝感激,即使這意味着重組我的數據庫更多的表或表中的新字段。

在此先感謝,巴里

+0

它易於閱讀與格式。 – Zohaib

+0

感謝您的幫助Zohaib –

回答

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子句(在上面的例子中我添加的話)

+0

對不起,這是一個錯字,我有結束)在我的聲明中,我遇到的問題是,它會返回所有與第二個錶鏈接的問題,即使用戶之前沒有對該項目進行評論。我的問題不在於語法,而在於連接語句的結構。 –

+0

我不明白你爲什麼要這樣做'OR questions.item_ref = my_item_comments.item_ref' =>這是加入條件,所以你應該刪除'或部分' – cristian

+0

我這樣做,但它不會返回問題的用戶賣方已回覆 –

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爲您的查詢。左連接將確實獲得所有行。

+0

感謝理查德,但它不是我有問題的語法,它的實際陳述,它沒有給我我要求的結果 –

+0

我已經嘗試過'right join','left join','inner join',但它仍然返回相同的結果,奇怪的是,當我運行'mysql_fetch_array'' while'循環時,即使表中還有其他'questoner_user_ref','questioner_seller_ref'也是相同的。這就是爲什麼我質疑sql語句 –

+0

好,所以我已將語句更改爲'$ 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' OR questions.lister_ref ='$ user_ref'ORDER BY timestamp DESC「);'當我檢查結果時,它會返回正確的結果...差不多! –