2015-11-07 62 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