MySQL查询谜题

时间:2009-12-19 22:34:27

标签: php mysql

我有一个包含两个字段(id和word)的表。 任何人都可以告诉我为什么:

$query0 = "SELECT * FROM words WHERE id IN ($treated_words) ";

是一个有效的查询。但是:

$query0 = "SELECT * FROM words ORDER BY id ASC WHERE id IN ($treated_words) ";

不是。非常感谢

3 个答案:

答案 0 :(得分:9)

SQL查询中的元素顺序很重要。 ORDER BY子句必须出现在WHERE子句之后。

查看MySql文档以获取语法规则。你会看到像

这样的东西
SELECT [ DISTINCT | ALL ]
  column_expression1, column_expression2, ....
  [ FROM from_clause ]
  [ WHERE where_expression ]
  [ GROUP BY expression1, expression2, .... ]
  [ HAVING having_expression ]
  [ ORDER BY order_column_expr1, order_column_expr2, .... ]

答案 1 :(得分:6)

尝试在ORDER BY id ASC部分之后移动WHERE id IN ($treated_words)

答案 2 :(得分:2)

在where语句之前你不能拥有order_by。

MySQL以这种方式工作。 它从表中选择所有或某些字段,适用于过滤(where)和按id排序。这就是为什么你不能订购选定的数据,然后对它应用过滤器。