2013-11-28 30 views
0

我想從我的表中選擇一個隨機行,並使用ID在我的數組中。從字符串中的ID中檢索表中的隨機行

字符串$ data包含我想用逗號分隔的所有id列表。

$statement = $conn->prepare("SELECT * FROM clients ORDER BY rand() WHERE find_in_set(id,'$data') LIMIT 1"); 

這是我的查詢,

ID是我的表的字段。

以下是錯誤

An error has occurred exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE find_in_set(id,'0,1') LIMIT 1' at line 1' in 
+0

質疑以下順序進行評價。 「WHERE」=>「GROUP BY」=>「HAVING」=>「ORDER BY」=>「LIMIT」 –

回答

0

您的查詢是錯誤的。你需要先重寫它。見下圖1

$statement = $conn->prepare("SELECT * FROM clients WHERE find_in_set(id,'$data') ORDER BY rand() LIMIT 1"); 
+1

謝謝 –

0

order by clause placement在你的查詢中是錯誤的。

$statement = $conn->prepare("SELECT * FROM clients WHERE find_in_set(id,'$data') 
ORDER BY rand() LIMIT 1"); 
1

嘗試此,ORDER BY應該是後where條件或tablename

SELECT * FROM clients WHERE find_in_set(id,'$data') ORDER BY rand() LIMIT 1 

語法:http://dev.mysql.com/doc/refman/5.0/en/select.html

SELECT 
[ALL | DISTINCT | DISTINCTROW ] 
    [HIGH_PRIORITY] 
    [STRAIGHT_JOIN] 
    [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] 
    [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] 
select_expr [, select_expr ...] 
[FROM table_references 
[WHERE where_condition] 
[GROUP BY {col_name | expr | position} 
    [ASC | DESC], ... [WITH ROLLUP]] 
[HAVING where_condition] 
[ORDER BY {col_name | expr | position} 
    [ASC | DESC], ...] 
[LIMIT {[offset,] row_count | row_count OFFSET offset}] 
[PROCEDURE procedure_name(argument_list)] 
[INTO OUTFILE 'file_name' export_options 
    | INTO DUMPFILE 'file_name' 
    | INTO var_name [, var_name]] 
[FOR UPDATE | LOCK IN SHARE MODE]]