2013-06-18 74 views
0

结合我有一个SQL语句是这样的:`ORDER BY`和`LIMIT`与`JOIN`

$sql = "SELECT *, films.category AS filmCategory FROM films LEFT OUTER JOIN items ON items.unique = films.ref ORDER BY unique ASC LIMIT 0, 4"; 

不起作用。它的工作原理没有ORDER BYLIMIT部分,像这样:

$sql = "SELECT *, films.category AS filmCategory FROM films LEFT OUTER JOIN items ON items.unique = films.ref"; 

我似乎无法找到添加ORDER BYLIMIT得到仅从films表中的第4项的方式。之后,加入的部分只能从另一个表中获得这四个项目的更多信息。它是如何以正确的方式完成的?

+0

LIMIT子句适用于整个查询,而不仅仅是'films'表。如果你想限制那张表,你必须使用子查询。 – Barmar

回答

2

如果你想限制一个特定的表,你必须使用子查询。

SELECT *, films.category AS filmCategory 
FROM (SELECT * 
     FROM films 
     ORDER BY ref ASC 
     LIMIT 4) films 
LEFT OUTER JOIN items 
ON items.`unique` = films.ref 
ORDER BY `unique` ASC 
+0

谢谢。尽管如此,我无法完成这项工作。为什么在“括号”后面再写一次“电影”? – Steeven

+0

@Steeven。 。 。这是子查询的别名。它使用与表格相同的名称,因此查询的其余部分中的引用不必更改。 –

+0

我可以让你的代码工作,如果我删除最后一句'ORDER BY'唯一'ASC'。奇怪的是它不适用于这条线。 “电影”和“物品”这两个表都有独特的色彩。 – Steeven