2013-11-28 7 views
0

Я пытаюсь выбрать случайную строку из таблицы с идентификаторами в моем массиве.Извлечь случайную строку из таблицы из идентификаторов в строке

Строка $ data имеет весь список идентификаторов, которые я хочу разделять запятыми.

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

это мой запрос,

идентификатор поля моего стола.

Здесь ошибка

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

Ваш запрос неправильно. Сначала вам нужно переписать его. См. Ниже один

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

спасибо, что он сработал –

0

Порядок размещения по заказам неверен в вашем запросе.

$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]] 
Смежные вопросы