Проблема с запросом MYSQL - объедините детали продукта в результат - PullRequest
1 голос
/ 03 января 2012

Я хочу получить некоторые данные из моей базы данных, которые похожи на квитанцию, которую вы получаете в супермаркете (просто пример, который в некотором роде подходит для моей реальной ситуации).Например, вы получаете 2 (всегда только 2) продукта 1 и 3. Эти продукты хранятся в отдельной базе данных продуктов.Результаты ваших покупок хранятся в одной базе данных, содержащей все данные, такие как время, местоположение и т. Д., В двух столбцах (product_1 и product_2).Опять же, эта ситуация с покупками является всего лишь сравнением с моей реальной ситуацией, поэтому я знаю, что это не будет хорошей структурой базы данных для списка покупок.

Так что теперь я хотел бы получить квитанцию ​​об оплате целиком, но вместо печатиИдентификаторы товара Я хотел бы иметь имя и, например, цену.

Если бы у меня был только один продукт, я бы использовал этот запрос:

SELECT `list`.`time`, `list`.`location`, `prod`.`prod_name`, `prod`.`prod_price`
FROM `shopping_list` `list`, `products` `prod`
WHERE `list`.`product_1` = `prod`.`prod_id`

Но так как у меня есть два продуктаЯ не могу просто продолжить с

AND `list`.`product_2` = `prod`.`prod_id`

Но как вы добиваетесь того, что я хотел бы получить?

Большое спасибо, Фил

Ответы [ 3 ]

0 голосов
/ 03 января 2012

Я не знаю вашей точной ситуации, но обычно имена полей, такие как product_1 и product_2, указывают на плохой дизайн базы данных.однако, если вам действительно это нужно, вам нужно присоединиться к таблице продуктов дважды.

select
 * 
from
 list l
 , product p1
 , product p2
where
  l.product_1 = p1.product_id
  and l.product_2 = p2.product_id

(это синтаксис оракула, но я думаю, что он будет работать и в MySQL).

0 голосов
/ 03 января 2012

Предыдущие ответы работают хорошо, если вы можете разобрать две строки из 1 строки результатов базы данных. Если вам нужны две строки из базы данных, вы можете выполнить запрос UNION:

SELECT `list`.`time`, `list`.`location`, `prod`.`prod_name`, `prod`.`prod_price`  
FROM `shopping_list` `list`, `products` `prod`  
WHERE `list`.`product_1` = `prod`.`prod_id` 
UNION
SELECT `list`.`time`, `list`.`location`, `prod`.`prod_name`, `prod`.`prod_price`  
FROM `shopping_list` `list`, `products` `prod`  
WHERE `list`.`product_2` = `prod`.`prod_id` 
0 голосов
/ 03 января 2012

Вам нужно будет дважды присоединиться к таблице продуктов

например,

SELECT 
      `list`.`time`, 
      `list`.`location`, 
      `prod1`.`prod_name` `prod_name1`, 
      `prod1`.`prod_price` `prod_price1` ,
      `prod2`.`prod_name` `prod_name2`, 
      `prod2`.`prod_price` `prod_price2` 
FROM `shopping_list` `list`
     INNER JOIN  `products` `prod1`
     ON  `list`.`product_1` = `prod1`.`prod_id`     
      INNER JOIN  `products` `prod2`
     ON  `list`.`product_2` = `prod2`.`prod_id`

Я не уверен, каковы ваши бизнес-правила, поэтому вам может потребоваться преобразовать второе ВНУТРЕННЕЕ СОЕДИНЕНИЕв левое соединение, если им нужно всегда выбирать два продукта.

...