2009-12-19 4 views
1

J'ai une table avec deux champs (id et mot). quelqu'un peut me dire pourquoi:MySQL Query puzzle

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

est une requête valide. Mais:

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

ne l'est pas. Un grand merci

+0

Merci. Je m'excuse pour une question aussi stupide. –

+2

@Patrick: Nous avons tous été là. –

Répondre

9

L'ordre des éléments dans une requête SQL est important. La clause ORDER BY doit apparaître après la clause WHERE.

Regardez les documents MySql pour les règles de syntaxe. Vous verrez quelque chose comme

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, .... ] 
6

essayer de déplacer le ORDER BY id ASC après la partie WHERE id IN ($treated_words).

2

Vous ne pouvez pas avoir order_by avant où statement.

MySQL fonctionne de cette façon. il sélectionne tout ou certains champs de la table, s'applique au filtre (où) et que les commandes par ID. c'est pourquoi vous ne pouvez pas commander les données sélectionnées et y appliquer des filtres.