SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

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

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

Вы не зашли.

#1 09.05.2012 14:34:27

Роман Книжный
Участник
Зарегистрирован: 06.10.2011
Сообщений: 9

Помогите сделать выборку из двух таблиц

Есть две таблицы:
2. performance
performance_id | name
3. product_performance_description
product_id | performance_id | value

Необходимо сделать из этих двух таблиц одну с полями name из первой и value из второй. Пишу следующий запрос:

SELECT p.name, ppd.value FROM performance p LEFT JOIN product_performance_description ppd ON (ppd.performance_id = p.performance_id)

С помощью этого запроса выводятся только значения performance_id, которые есть в таблице product_performance_description. если в таблице performance есть performance_id, которого нет в product_performance_description, то он не выводится. Как сделать так, выводились все значения из таблицы performance и если для них нет соответствий из таблицы product_performance_description, то выводились нули.

Неактивен

 

#2 09.05.2012 14:38:11

Роман Книжный
Участник
Зарегистрирован: 06.10.2011
Сообщений: 9

Re: Помогите сделать выборку из двух таблиц

Забыл написать что идет условие для определенного продукта. Я просто это убрал из запроса

Неактивен

 

#3 09.05.2012 14:45:25

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите сделать выборку из двух таблиц

Выполните запрос из первого поста в том виде как привели его и увидите, что он работает как вы и хотите.

Неактивен

 

#4 09.05.2012 16:07:04

Роман Книжный
Участник
Зарегистрирован: 06.10.2011
Сообщений: 9

Re: Помогите сделать выборку из двух таблиц

Не знаю что я делаю не так. Но в таблице product_performance_description есть продукт с определенным номером у него 12 характеристик performance. У каждой есть значение. Я делаю запрос:

SELECT p.name, ppd.value FROM " . DB_PREFIX . "performance p LEFT JOIN " . DB_PREFIX . "product_performance_description ppd ON (ppd.performance_id = p.performance_id)  WHERE ppd.product_id = '" . (int)$product_id . "'

Выводит только те поля, которые есть у этого продукта в таблице product_performance_description. Хотя в таблице performance 18 полей. И по идее нужно все 18 чтобы вывело, а вместо тех где нет значений вставило нули.

Неактивен

 

#5 09.05.2012 16:18:33

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите сделать выборку из двух таблиц

SELECT p.name, ifnull(ppd.value,0) FROM performance p LEFT JOIN
(select `value`, performance_id from product_performance_description where product_id = ) ppd ON (ppd.performance_id = p.performance_id)

Неактивен

 

#6 09.05.2012 16:40:50

Роман Книжный
Участник
Зарегистрирован: 06.10.2011
Сообщений: 9

Re: Помогите сделать выборку из двух таблиц

Вываливается ошибка:
Error: Unknown column 'ppd.performance_id' in 'on clause'

Неактивен

 

#7 09.05.2012 16:43:43

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите сделать выборку из двух таблиц

отредактировал

Неактивен

 

#8 09.05.2012 16:58:12

Роман Книжный
Участник
Зарегистрирован: 06.10.2011
Сообщений: 9

Re: Помогите сделать выборку из двух таблиц

Да, все работает! Ура!!! Только теперь новая проблема в таблице колонка со значениями value называется почему-то не value, а ifnull(ppd.value,0). Как сделать так чтобы она называлась value.

Неактивен

 

#9 09.05.2012 17:01:10

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Помогите сделать выборку из двух таблиц

ifnull(ppd.value,0) as `нужное вам название`

Неактивен

 

#10 09.05.2012 17:06:23

Роман Книжный
Участник
Зарегистрирован: 06.10.2011
Сообщений: 9

Re: Помогите сделать выборку из двух таблиц

Спасибо большое. Разобрался. Пол дня потратил. Везде написано что если использовать LEFT JOIN и будут отсутствовать значения как в моем случае, то он вставит нули. Ничего подобного.

Неактивен

 

Board footer

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