2013-07-06 76 views
0

我有一個複雜的INNER JOIN SQL請求我無法環繞我的頭。我希望有人能幫助我。它涉及3個表格,所以它有2個內部連接。我的數據庫有表格「用戶」,「聲明」,「意見」。複雜INNER JOIN SQL請求

用戶可以撰寫陳述和意見。 意見有一個「authorid」變量引用它們所代表的用戶的id,並且它們有一個引用它們引用的語句的「statementid」變量。

我想提交一個請求,在給定2個語句的情況下,我可以返回有關這兩個語句的作者意見的用戶列表。

我想這樣

$sid1=5; 
$sid2=6; 
$sql = " 
     SELECT user.* 
     FROM users 
     INNER JOIN opinion 
     ON opinion.authorid=user.uid 
     WHERE opinion.statementid= [sid1? how can i use both] 
     INNER JOIN statement 
     ON statment.uid=opinion.statementid 
     "; 

但你可以看到我堅持。我需要聯盟嗎?如果您需要進一步澄清,請告訴我。

在此先感謝。

編輯:我想通了,如何做到這一點:

SELECT DISTINCT users.uid 
FROM users 
JOIN opinion o, opinion o2 
WHERE users.uid = o.authorid 
AND users.uid = o2.authorid 
AND o2.statementid = $sid2 
AND o.statementid = $sid1 
+0

SELECT ... JOIN..ON ... JOIN ... ON ... WHERE ... IN(...)... GROUP BY ...具有COUNT(*)=。 .. – Strawberry

回答

0
SELECT DISTINCT users.uid 
FROM users 
JOIN opinion o, opinion o2 
WHERE users.uid = o.authorid 
AND users.uid = o2.authorid 
AND o2.statementid = $sid2 
AND o.statementid = $sid1 
0

你應該能夠兩次鏈接。

SELECT user.* 
FROM users u. opinion o1, statement s1 
    , opinion o2, statement s2 
WHERE o1.authorid=user.uid 
AND o2.authorid = user.uid 
AND o1.statement_id = s1.sid 
AND o2.statementid = s2.sid 
AND s1.sid = $sid1 
AND s2.sid = $sid2 
+0

我無法得到那個工作。我還修復了s1.sid和s2.sid(語句有一個uid,而不是sid)。儘管這個解決方案看起來對我來說最容易理解。我希望它能工作...... – george

1
SELECT DISTINCT user.* 
    FROM opinion o 
    JOIN usrs u 
     ON u.uid = o.author_id 
     AND o.statement_id = $sid1 
    INTERSECT 
    SELECT DISTINCT user.* 
    FROM opinion o 
    JOIN usrs u 
     ON u.uid = o.author_id 
     AND o.statement_id = $sid2 

不要有相交的SQL方言可用?

SELECT A.* FROM (
    SELECT DISTINCT user.* 
    FROM opinion o 
    JOIN usrs u 
     ON u.uid = o.author_id 
     AND o.statement_id = $sid1 
) A 
JOIN (
    SELECT DISTINCT user.* 
    FROM opinion o 
    JOIN usrs u 
     ON u.uid = o.author_id 
     AND o.statement_id = $sid2 
) B on A.uid = B.uid 
+0

即使修復了語法,也就是在修改author_id到authorid,statement_id到statementid和usrs到用戶之後,我無法讓這些工作之一工作......我可能做錯了什麼?我覺得我必須犯一些愚蠢的錯誤...... – george

+0

@George:錯誤的更多細節,以及我的打字少挑選將是有益的。 –

+0

我不挑剔的打字我只是想指出,它不工作的原因不是由於變量的拼寫錯誤。我不確定如何獲取錯誤消息,因爲我正在使用PHP,並且只是在SQL查詢不起作用時才運行。 – george

0

我想這是你想要的查詢:

SELECT u.* 
    from opinion o join 
     users u 
     on o.authorid = u.uid join 
     statement s 
     on o.statementid = s.sid 
    where s.sid in (<list of statement ids>); 

你的數據結構的描述有點混亂。但我猜測opinion有作者和陳述是關鍵關係(並且statement沒有與它關聯的單獨的用戶ID)。

+0

語句有一個與之關聯的用戶標識,但那是創建該語句的用戶。 – george

+0

即使將s.sid更改爲s.uid(語句有uid,而不是sid),我也無法使其工作......任何想法我可能做錯了什麼? – george

+0

其實我只是讓它工作,但我不確定它是否產生了我想到的答案...... – george