Проверить правильность выборки из БД

Тема в разделе "PHP", создана пользователем qwr938, 28 авг 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. qwr938

    qwr938 Постоялец

    Регистр.:
    13 авг 2008
    Сообщения:
    60
    Симпатии:
    1
    Проверить правильность выборки из БД

    Товарищи! Проверьте, пожалуйста, правильность выборки из БД, которую я написал:

    $result = mysql_query("SELECT * FROM table WHERE (category='1' OR category='2' OR category='3') AND (color='black' OR color='red') AND year='2010' ORDER BY name DESC LIMIT 20",$db);

    Имеем следующее: из таблицы table выбираются все строки, для которых category равно 1, 2 или 3, а цвет чёрный или красный, а год 2010; результаты сортируются по имени от Я до А и в переменную $result заносятся первые 20 результатов.

    Таким образом, для таблицы вида

    id name category color year
    1 Имя1 1 black 2010
    2 Имя2 1 black 2009
    3 Имя3 2 red 2010
    4 Имя4 4 black 2010
    5 Имя5 1 grey 2010
    6 Имя6 3 black 2010
    7 Имя7 1 black 2007
    8 Имя8 5 black 2007
    9 Имя9 1 black 2010
    10 Имя10 1 red 2009

    запросу удовлетворяют строки

    id name category color year
    1 Имя1 1 black 2010
    3 Имя3 2 red 2010
    6 Имя6 3 black 2010
    9 Имя9 1 black 2010

    Я правильно составил запрос на выборку?
     
  2. horpah

    horpah

    Регистр.:
    21 июн 2010
    Сообщения:
    199
    Симпатии:
    55
    Правильно. А еще лучше (category='1' OR category='2' OR category='3') заменить на category IN (1,2,3). Так короче и удобнее читать.
     
    UDAV и qwr938 нравится это.
  3. qwr938

    qwr938 Постоялец

    Регистр.:
    13 авг 2008
    Сообщения:
    60
    Симпатии:
    1
    Про category IN (1,2,3) я не знал. Надо попробовать!

    Попробовал. Вроде работает. Интересно, а скорость выполнения такая же или больше/меньше?
     
  4. horpah

    horpah

    Регистр.:
    21 июн 2010
    Сообщения:
    199
    Симпатии:
    55
    Скорее всего по моему принципу быстрее, но в случае длинного списка категорий. В данном случае не заметишь разницы. Дело еще в том что часто такие конструкции создаются скриптом по полученному списку, который может иметь быть не 1,2,3 а, например, 1,2,...,100 и представь тогда (category=1 OR category=2 OR ... OR category=100). В таком случае, думаю будет IN(1,2..100) быстрее
     
Статус темы:
Закрыта.