2013-08-15 3 views
1

У меня есть две страницы. На первой странице выбирается и отображается случайная строка из моей базы данных. Затем представляется форма. На второй странице я хочу, чтобы случайная строка из базы данных была выбрана, но мне нужен тот, который был выбран случайным образом , который будет исключен из этого запроса.Оператор MySQL NOT IN с другими параметрами

Я видел NOT IN как способ сделать это, но он, похоже, не работает в сочетании с RAND() или LIMIT, хотя я могу просто иметь порядок операторов. Вот код, который у меня до сих пор не работает:

$sql_new = "SELECT * FROM table ORDER BY RAND() LIMIT 1 NOT IN (SELECT * FROM table WHERE id='$id')"; 
$result_new = $mysqli->query($sql_new); 

Это не возвращает никакой информации. Любая помощь по синтаксису будет отличной.

+0

Пожалуйста, проверьте http://dev.mysql.com/doc/refman/5.5/en/select.html особенно, как и где ставить 'WHERE' положение – zerkms

ответ

1

Попробуйте это:

$sql_new = "SELECT * FROM table WHERE id != '$id' ORDER BY RAND() LIMIT 1;"; 
$result_new = $mysqli->query($sql_new); 
+0

+1. Подумайте, зачем использовать исключение здесь, особенно в полном наборе столбцов (*) ... Я всегда думал, что IN и NOT IN должны применяться к столбцам конкретно. Во всяком случае :) –

+0

Неверная практика заключить значение 'int' с кавычками - потому что в этом случае DB будет выполнять строку до int cast перед сравнением. –

+0

@AlmaDoMundo Вы правы, но что вы уверены, что 'id' является' int' на самом деле? OP не упоминал об этом ... – Spontifixus

0

Как MySQL Docs говорят

В соответствии со стандартом SQL, IN возвращает NULL не только если выражение в левой части равно NULL, но и если в списке нет совпадений , и одно из выражений в списке равно NULL.

Необходимо указать имя столбца до НЕ В КНОПКЕ. Что-то вроде этого

SELECT val1 FROM tbl1 WHERE val1 NOT IN (1,2,'a'); 
Смежные вопросы