Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Выборка из 2-х таблиц даже при том, что для полей одной таблицы может не существовать полей другой
Покинул форум
Сообщений всего: 103
Дата рег-ции: Март 2011
Помог: 0 раз(а)
В заголовке очень сумбурно описал, потому что я не очень понимаю, как это описать лучше. Вот расширенное:
Есть две таблицы: одна с постами, а в другой есть все данные для постов (это Wordpress и его таблицы _posts и _postmeta). Во всех данных структура такая: entry_id, post_id, meta_key, meta_value. Для некоторых записей из таблицы _posts есть запись в таблице _postmeta, которая соответствует условию
Но в то же время для некоторых такой записи просто не существует, даже со значением NULL. То есть по запросу получается вытащить либо те посты, для которых есть _yourls, либо те, для которых нет. Я решил это UNION'ом, получилось так:
Но тут наступает некоторая задница, потому что пусть запрос отрабатывает красиво, возвращая один набор данных, но сам запрос не до конца оптимизирован и почти что не расширяем. Теперь вопросы:
Как мне можно сначала выбрать посты по одинаковым условиям из обоих запросов? Подозреваю, что тут мне помогут вложенные SELECT'ы.
Другой вопрос: как мне можно в один набор данных объединить посты, для которых есть _yourls и посты, для которых нет, так, чтобы, если _youls есть, то он выбирался, а если нет, чтобы на его месте был NULL?
Спасибо за старания понять мою писанину
Мелкий
Отправлено: 29 Августа, 2014 - 07:22:59
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
left join
----- PostgreSQL DBA
SkaN
Отправлено: 30 Августа, 2014 - 00:26:49
Гость
Покинул форум
Сообщений всего: 103
Дата рег-ции: Март 2011
Вот такое решение. Сделал встроенный запрос, чтобы изолировать условие WHERE `meta_key` = '_yourls_url'. Если его добавить в основной запрос, то возвращается только то, что имеет такое поле.
Мелкий
Отправлено: 30 Августа, 2014 - 10:52:48
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.