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
Форумы портала PHP.SU :: Версия для печати :: Выборка 2 значений из 1 столбца
Форумы портала PHP.SU » » Работа с СУБД » Выборка 2 значений из 1 столбца

Страниц (1): [1]
 

1. Ismail - 11 Мая, 2014 - 20:05:09 - перейти к сообщению
Есть 2 таблицы и столбцы в них:

1 таблица:

ID, post_title
1, Название_1
2, Название_2
3, Название_3
4, Название_4

2 таблица:

post_id, meta_key, meta_value
1, thumb, картинка
1, site, ссылка
2, thumb, картинка
2, site, ссылка
3, thumb, картинка
3, site, ссылка
4, thumb, картинка
4, site, ссылка


ID и post_id содержат номер поста, используя в запросе WHERE ID=post_id я вытаскиваю данные из 2 таблиц.

Нужно вытащить значение meta_value где WHERE meta_key=thumb и meta_key=site.

В цикле, при выводе я пишу $row['meta_value'] - для вывода картинки. Теперь вопрос, что писать для вывода "ссылка", $row['meta_value']??
2. Panoptik - 11 Мая, 2014 - 20:46:11 - перейти к сообщению
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT t1.*, t_site.meta_value site, t_thumb.meta_value thumb
  2. FROM tbl1 t1
  3. LEFT JOIN tbl2 t_site
  4.   ON t_site.post_id = t1.id
  5.     AND meta_key = 'site'
  6. LEFT JOIN tbl2 t_thumb
  7.   ON t_thumb.post_id = t1.id
  8.     AND meta_key = 'thumb'
  9. WHERE t1.id = ID


3. Ismail - 11 Мая, 2014 - 20:58:45 - перейти к сообщению
Если я правильно понял, нужно заменить tbl1 и tbl2 на мои первую и вторую таблицы? Если так, то пишет :

SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'meta_key' in on clause is ambiguous
4. Panoptik - 11 Мая, 2014 - 21:00:59 - перейти к сообщению
верно пишет, нужно добавить алиасы к полям

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT t1.*, t_site.meta_value site, t_thumb.meta_value thumb
  2. FROM tbl1 t1
  3. LEFT JOIN tbl2 t_site
  4.   ON t_site.post_id = t1.id
  5.     AND t_site.meta_key = 'site'
  6. LEFT JOIN tbl2 t_thumb
  7.   ON t_thumb.post_id = t1.id
  8.     AND t_thumb.meta_key = 'thumb'
  9. WHERE t1.id = ID

(Добавление)
в конце ID я так понимаю вы тоже подставите то что вам нужно или уберете WHERE вообще
5. Ismail - 11 Мая, 2014 - 21:12:58 - перейти к сообщению
Работает.

Но я забыл указать, что из всех записей нужно выбирать только те, у которых в первой таблице значение столбца post_type = post и post_status = publish (в первой таблице).

Очень извиняюсь что сразу не написал. Огорчение Огорчение
6. Panoptik - 11 Мая, 2014 - 21:14:11 - перейти к сообщению
ну так кто вам мешает добавить эти условия?
7. Ismail - 11 Мая, 2014 - 21:37:22 - перейти к сообщению
Спасибо большое, что-то туплю.

 

Powered by ExBB FM 1.0 RC1