2012-03-24 3 views
1

Я тестирую IF-инструкции в MySQL в первый раз, и я сталкиваюсь с ошибкой.IF Statement в MySQL, используя THEN и ELSE

Я пытаюсь, во-первых, узнать, сколько строк находится в таблице, а затем в зависимости от того, меньше или равно ли счету пять, верните все строки в таблице или, если это не так, вернуть все сообщения в диапазон, используемый в предложении LIMIT.

Ошибка, которую я получаю, следующая:

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 'IF SELECT COUNT(*) FROM Posts <= 5 THEN SELECT * FROM Posts ELSE SELECT * FR' at line 1

Прошу вас, скажите мне, в чем я ошибаюсь?

Макс.

$query = mysql_query(
    "IF SELECT COUNT(*) FROM `Posts` <= 5 
    THEN 
     SELECT * FROM `Posts` 
    ELSE 
     SELECT * FROM `Posts` LIMIT $from, $limit") 
    or die(mysql_error()); 
+2

AFAIK mysql IF работает так: http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html – dotoree

+1

Возможный дубликат [Почему не будет просто Если инструкция ELSE работает в mySql] (http: //stackoverflow.com/questions/4294312/why-wont-simple-if-else-statement-work-in-mysql) – JJJ

+0

@ dotoree в MySQL есть две конструкции 'IF', но' IF .. ELSE' не может использоваться например, см. здесь http://dev.mysql.com/doc/refman/5.1/en/if-statement.html – Kaii

ответ

4

Вам не нужно это делать. Mysql обрабатывает это автоматически, просто используйте

$query = "SELECT * FROM `Posts` LIMIT $from, $limit"; 
+0

@Kaii, На самом деле, я не думаю, что вышеуказанный оператор может быть выполнен внутри mysql_query() вообще. Я хочу только исправить ошибку, вот и все – Starx

+0

исправлено это для вас;) – Kaii

+0

@Kaii, Спасибо за редактирование +1 – Starx

3

IF .. THEN .. ELSE syntax in MySQL доступен только для процедурного кода (хранимых precudures, функции, триггеры ..), но не для SELECT заявлений.

Вместо этого функции управления потоком IF() и более подробные CASE WHEN .. THEN .. END могут использоваться в SELECT запросах. Но это не поможет в вашем случае, когда вы действительно хотите выполнить два разных запроса в зависимости от состояния.

В вашем конкретном случае я не уверен, если вы даже не нужно делать: когда есть только пять или меньше сообщений в столе, LIMIT 0,10 даст вам эти пять постов без ошибок:

$sql = "SELECT * FROM Posts LIMIT $from, $limit";