2015-11-07 25 views
0

兩個表...如何正確連接兩個表使用替代ORDER BY

  1. people (personid, name, mainordering)
  2. entries (userid, personid, altordering)

「PERSONID」 是常見的領域。我的應用程序顯示用戶可以移動的可拖動列表。完成後,他們點擊「鎖定」他們的順序。

表:人

+----------+---------+--------------+ 
| personid | name | mainordering | 
+----------+---------+--------------+ 
| 1  | Bob  | 2   | 
| 2  | Charlie | 4   | 
| 3  | Jim  | 1   | 
| 4  | Doug | 3   | 
+----------+---------+--------------+ 

因此,使用mainordering,它會顯示:

Jim 
Bob 
Doug 
Charlie 

條目表可能有(用戶16):

+--------+----------+-------------+ 
| userid | personid | altordering | 
+--------+----------+-------------+ 
| 16  | 1  | 3   | 
| 16  | 2  | 1   | 
| 16  | 3  | 2   | 
| 16  | 4  | 4   | 
+--------+----------+-------------+ 

所以,如果用戶16已經提交了他的條目但不鎖定它,我想使用altordering顯示他的列表。即

Charlie 
Jim 
Bob 
Doug 

我正在努力使用正確的連接。以下是我試過和不工作(它只是通過mainordering仍然排序)...

$sql = "SELECT * from entries 
    WHERE userid=".$_SESSION['userid']." 
    LEFT JOIN people ON entries.personid = people.personid 
    ORDER BY altordering"; 

任何想法,將不勝感激。謝謝你...

回答

2

你確定在JOIN之前使用WHERE時沒有錯誤嗎?

它應該是這樣的:

SELECT people.* 
FROM people 
JOIN entries ON entries.personid = people.personid 
WHERE entries.userid={$_SESSION['userid']} 
ORDER BY entries.altordering 

我認爲entries.personid將永遠有一個匹配的人people,所以你應該使用一個INNER JOIN。如果您想檢索altordering,即使對於不存在的people,也可以使用FROM entries LEFT JOIN people

+0

謝謝。在你指出它之後,我確實發現了一個問題,並且在糾正之後,它確實給我一個錯誤,正如你所說的那樣(在JOIN之前使用WHERE)。無論如何,你的代碼完美工作,非常感謝你的幫助/知識。 – user3304303