Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
"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)
Неактивен
Вам такое не нужно. Это куда делается проще с клиентской стороны. Правда.
Я в этом абсолютно уверен
Если совсем точно уверены, что нужны костыли со стороны базы — проще всего
сделать временную табличку, а потом сделать с ней внешнее объединение.
Неактивен
Понятно.
Но вообще я не представляю как это сделать проще когда условий около 1000.
Получается нужно сначала сделать массив из 1000 элементов и заполнить его всеми результатами. На этом бы всё и закончилось, но т.к. отсутствующие результаты не возвращаются - мне нужно создать ещё один массив, его в цикле последовательно заполнить, и потом удалить первый. Это получится понадобится минимум в 2 раза больше памяти, +1000 переборов массива и +1000 копирований. Меня это весьма смущает, получается костыльно. Согласитесь, лучшеб база просто NULL значения возвращала.
Тогда другой вопрос, результаты всегда возвращаются в порядке, в котором они идут в WHERE или MySQL имеет права переставлять их для лучшего быстродействия и делает иногда это?
Отредактированно gif-t (31.08.2011 17:29:06)
Неактивен
Честно говоря, не вижу тут никакого копирования лишнего. Просто сделайте массив
из 1000 значений и заполните его результатами. Более того, если НЕ вытаскивать
NULL из базы, то данных будет передаваться меньше, и памяти будет использоваться
меньше. Так что нет, не соглашусь
Порядок будет произвольным, если Вы его явно не задаете через ORDER BY.
Неактивен
Страниц: 1