SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 31.08.2011 00:27:55

gif-t
Завсегдатай
Зарегистрирован: 08.08.2011
Сообщений: 74

Обязательный возврат результатов ко всем условиям в запросе SELECT

"SELECT `a`, `b`, `v`, `g`, `d` FROM table WHERE (`1` = 'q' or `1` = 'w' or `1` = 'e')"
Этот запрос должен из базы вынуть 3 строки. Но бывает что какой-то нет и тогда он возвращает только две.
Мне нужно чтобы возвращал всегда в порядке, в котором условия идут в запросе и всегда возвращал все строки, даже которых нет в базе. Которых нет чтобы возвращал NULL к примеру.

Чтобы не через цикл, а такая система работала:
$mas['q'] = mysql_fetch_row($ress);
$mas['w'] = mysql_fetch_row($ress);
$mas['e'] = mysql_fetch_row($ress);

И если к примеру нету строки в базе, удолетворяющей `1` = 'w' то чтобы $mas['w'] в итоге на выходе получался массив:
$mas['w']['a'] = NULL;
$mas['w']['b'] = NULL;
$mas['w']['v'] = NULL;
$mas['w']['g'] = NULL;
$mas['w']['d'] = NULL;

а не строке `1` = 'e'.
Можно ли такое сделать?
Спасибо

Отредактированно gif-t (31.08.2011 00:41:32)

Неактивен

 

#2 31.08.2011 10:34:49

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Обязательный возврат результатов ко всем условиям в запросе SELECT

Вам такое не нужно. Это куда делается проще с клиентской стороны. Правда.
Я в этом абсолютно уверен smile

Если совсем точно уверены, что нужны костыли со стороны базы — проще всего
сделать временную табличку, а потом сделать с ней внешнее объединение.

Неактивен

 

#3 31.08.2011 17:27:07

gif-t
Завсегдатай
Зарегистрирован: 08.08.2011
Сообщений: 74

Re: Обязательный возврат результатов ко всем условиям в запросе SELECT

Понятно.
Но вообще я не представляю как это сделать проще когда условий около 1000.
Получается нужно сначала сделать массив из 1000 элементов и заполнить его всеми результатами. На этом бы всё и закончилось, но т.к. отсутствующие результаты не возвращаются - мне нужно создать ещё один массив, его в цикле последовательно заполнить, и потом удалить первый. Это получится понадобится минимум в 2 раза больше памяти, +1000 переборов массива и +1000 копирований. Меня это весьма смущает, получается костыльно. Согласитесь, лучшеб база просто NULL значения возвращала.

Тогда другой вопрос, результаты всегда возвращаются в порядке, в котором они идут в WHERE или MySQL имеет права переставлять их для лучшего быстродействия и делает иногда это?

Отредактированно gif-t (31.08.2011 17:29:06)

Неактивен

 

#4 01.09.2011 23:26:47

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Обязательный возврат результатов ко всем условиям в запросе SELECT

Честно говоря, не вижу тут никакого копирования лишнего. Просто сделайте массив
из 1000 значений и заполните его результатами. Более того, если НЕ вытаскивать
NULL из базы, то данных будет передаваться меньше, и памяти будет использоваться
меньше. Так что нет, не соглашусь wink

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

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson