Значения NULL при несоответствии условиям LEFT JOIN в одной таблице.

EVILdoer

Guest
Значения NULL при несоответствии условиям LEFT JOIN в одной таблице.

Если строка не соответствует условиям LEFT JOIN,
то ВСЕ ЕЁ значения в результирущей таблице равны NULL,
особенно это обижает, когда работаешь с одной таблицей. :(

Запрос такой:

SELECT b1.id, b2.id
FROM board AS b1 LEFT JOIN board AS b2 ON b2.of = b1.id
WHERE b1.are = 10

Если b2.of в таблице нету, то и соответствующий b2.id тоже вырождается в NULL, как можно всё-таки получать его? Второй запрос делать не хочется.

Вообще: я пытаюсь сделать систему сообщений (форум), где разделы, темы и сообщения лежат в одной таблице. Are - статус: 10.. - раздел, 20.. - тема, 30.. - пост. Of - id того, чему принадлежит этот объект. У разделов - это 0. У темы - id раздела, у поста - id темы.
 

alpine

Новичок
EVILdoer
Если b2.of в таблице нету, то и соответствующий b2.id тоже вырождается в NULL, как можно всё-таки получать его? Второй запрос делать не хочется.
Я так понял что нужен INNER JOIN вместо LEFT JOIN.
 

EVILdoer

Guest
alpine
Но в таком случае, если тем в разделе не будет, то строка вообще не появится в выборке, а мне нужен NULL, если тем нет, и соответствующие темы, если они есть. =)
 

bkonst

.. хочется странного?...
Ответь на вопрос: какое значение b2.id ты хочешь получить, если подходящего b2.of не существует?
 

EVILdoer

Guest
bkonst
Естественно, хотелось бы получить там то значение, которое стоит в ячейке. Т.е. фактически получить тот id-шник, даже если ему не соответствует ни одна запись в другой таблице. Я думал, для этого и служит LEFT JOIN. Просто тут таблица перемножается сама с собой, поэтому при обнулении правой таблицы обнуляется и левая тоже. Имхо, это не правильно. Просто думал, что это можно как-то обойти...

Зачем мне строки, где одни NULL? ;)
 

vovik

Новичок
Автор оригинала: EVILdoer
Имхо, это не правильно. Просто думал, что это можно как-то обойти...
LEFT JOIN сделан не для вывода тем твоего форума, а для соединения таблиц. Почувствуй разницу. Так что твое "неправильно", мягко говоря, неуместно. Это можно обойти как угодно, но из твоих сообщений непонятно, что ты хочешь получить вместо NULL, если тем в разделе нет.

Во-первых, попробуй сосредоточиться и написать четко что ты хочешь получить. Четко заданный вопрос принесет тебе четко сформулированный ответ.

Во-вторых, я бы подумал еще раз над структурой БД. Вот эти статусы - 10, 20 и тд, выглядят не слишком здорово.
 

EVILdoer

Guest
vovik
Да я уже давно всё сделал. Просто вопрос этот меня заинтерсовал. Всё-таки, вы правы, где-то у меня ошибка была, потому что в другом случае наложения таблицы самой на себя всё с NULL-ами нормально было. Пробегаем по id одной, а если в другой таблице нет соотвествия, то получаем NULL ВО ВСЕХ полях той строки. Пора уже ман перечитывать... :)

Скорей всего в WHERE у меня что-то не правильно.
А с 10, 20, 30 всё нормально. Мне нужна расширяемость,
буду к форуму пришивать и комментарии из галлереи,
и гостевую и всё-всё-всё. Не знаю - можете закрыть тему,
если не интересно. :)
 
Сверху