ПРЕДЕЛИТЬ результаты в MySQL? - PullRequest
1 голос
/ 25 января 2012

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

Вот запрос, который у меня есть ...

$query = "SELECT * FROM events WHERE event_type = 'Christmas Listings' AND event_active='Yes' ORDER BY event_date ASC LIMIT 5";
$result= mysql_query($query); 

Ладно ... теперь немного о том, чего я хочу достичь (чтобы понять, чего я пытаюсь достичь):

  1. Я хочу проверить, что тип события ('event_type') - это то, что я получаю (т. Е. Рождественские листинги), поскольку в этом столбце есть несколько типов.

  2. Я хочу проверить, активно ли событие ('event_active') - Да (данные в этом поле - Да / Нет).

  3. Я хочу заказать их по ('event_date') ASC (данные в этом поле yyyy-mm-dd), поэтому они показывают самую последнюю запись по дате из БД.

  4. Я хочу ОГРАНИЧИТЬ (или каким-то образом контролировать вывод), чтобы при выполнении запроса такого типа через оператор WHILE отображались только 5 результатов.

ОК, все это работает, НО; когда я добираюсь до фактического выходного дисплея, у меня шаткий вывод о том, сколько результатов фактически отображается ... Что происходит, если у меня есть несколько отключенных событий, как в event_active, это 'Off' тогда почти как аргумент считает все результаты (включая event_active='Off') и, следовательно, не показывает, как я ожидаю их отображения?

Надеюсь, что это имеет смысл .... Любая помощь будет принята с благодарностью.

Ответы [ 4 ]

2 голосов
/ 26 января 2012
SELECT * 
FROM events 
WHERE event_type = 'Christmas Listings' AND event_active='Yes' 
ORDER BY event_date 
LIMIT 0, 5

чтобы ваше заявление было легче читать ..

  1. Вы должны использовать 1/0 вместо Да / Нет
  2. Предел не учитывает все строки! Первый шаг - выполнение запроса, включая ГДЕ Второй шаг - ЗАКАЗАТЬ ПО Третий шаг - LIMIT Если вы установили индекс для столбца, вы сортируете. Сортировка остановится через 5 строк, также означает - это становится быстрее
  3. ASC в команде ORDER BY не требуется, поскольку ASC по умолчанию
1 голос
/ 25 января 2012

Я действительно не уверен, что вы спрашиваете, но LIMIT работает следующим образом:

LIMIT означает, что после того, как ваш запрос выполнен и все WHERE операторы обработаны, возвращаются только первые 5.

ALl Результаты, где event_active не равно «Да», не будут отображаться и игнорироваться во всем.

Этот результат совпадает с результатом, в котором вы выполняете запрос без ограничения и просто смотрите на первые 5 строк.

0 голосов
/ 26 января 2012

Проблема, я думаю, связана с вашим 'event_active'.

MySQL использует 0 и 1, чтобы указать, является ли поле true / false, yes / no, on / off.Попробуйте использовать 0 и 1 в вашем операторе SELECT, если тип поля для этого поля не VARCHAR, и вы на самом деле используете эти слова.

0 голосов
/ 25 января 2012

Этот запрос должен быть в порядке.Я бы проверил ваш набор данных (или даже лучше, опубликовать его!).Возможно, вы захотите посмотреть на нормализацию базы данных тоже.Это поможет вам в будущем.

...