SQL: помогите сделать выборку в один запрос

Discussion in 'Программирование' started by AKopytenko, Feb 10, 2014.

  1. AKopytenko
    Offline

    AKopytenko Russian Joomla! Team Staff Member

    Joined:
    Sep 1, 2011
    Messages:
    1,963
    Likes Received:
    168
    Gender:
    Male
    Нужно сделать выборку из нескольких таблиц базы.
    Проблема в том, что в одной из таблиц при сопоставлении находится несколько записей и из-за этого строки на выдаче дублируются. Нужно выбрать только одну.
    До сих пор путаюсь в INNER LEFT RIGHT - поможете раскидать всё по-феншую? :)

    Код (PHP):
    1. SELECT
    2.     a.virtuemart_product_id,
    3.     a.published,
    4.     b.product_name,
    5.     c.product_price,
    6.     d.virtuemart_media_id,
    7.     e.file_url
    8. FROM bsocm_virtuemart_products AS a
    9. INNER JOIN bsocm_virtuemart_products_ru_ru AS b
    10. ON b.virtuemart_product_id = 89
    11. LEFT JOIN bsocm_virtuemart_product_prices AS c
    12. ON c.virtuemart_product_id = 89
    13. LEFT JOIN bsocm_virtuemart_product_medias AS d
    14. ON d.virtuemart_product_id = 89
    15. LEFT JOIN bsocm_virtuemart_medias AS e
    16. ON e.virtuemart_media_id = d.virtuemart_media_id
    17. WHERE a.virtuemart_product_id = 89

    Из таблицы bsocm_virtuemart_product_medias нужно выбрать только одно значение поля virtuemart_media_id, соответствующую условию virtuemart_product_id = 89

    P.S.: в конкретном случае, у товара одно название, одна цена, но несколько картинок...
     
  2.  
  3. woojin
    Offline

    woojin Местный Staff Member => Cпециалист <=

    Joined:
    May 31, 2009
    Messages:
    3,204
    Likes Received:
    334
    Gender:
    Male
    Код (PHP):
    1. SELECT
    2.     a.virtuemart_product_id,
    3.     a.published,
    4.     b.product_name,
    5.     c.product_price,
    6.    (SELECT virtuemart_media_id FROM bsocm_virtuemart_product_medias WHERE virtuemart_media_id=a.virtuemart_product_id LIMIT 1) as d
    7.     e.file_url
    8. FROM bsocm_virtuemart_products AS a
    9. INNER JOIN bsocm_virtuemart_products_ru_ru AS b
    10. ON b.virtuemart_product_id = a.virtuemart_product_id
    11. LEFT JOIN bsocm_virtuemart_product_prices AS c
    12. ON c.virtuemart_product_id = a.virtuemart_product_id
    13. LEFT JOIN bsocm_virtuemart_medias AS e
    14. ON e.virtuemart_media_id = d.virtuemart_media_id
    15. WHERE a.virtuemart_product_id = 89

    по идее вот так
    или всё то же что и у тебя но в SELECT перед d.virtuemart_media_id, добавить DISTINCT
     
  4. AKopytenko
    Offline

    AKopytenko Russian Joomla! Team Staff Member

    Joined:
    Sep 1, 2011
    Messages:
    1,963
    Likes Received:
    168
    Gender:
    Male
    Человек один тут намекнул, что дело в правильной расстановке JOIN - LEFT, RIGHT, INNER.
    К сожалению, лень не позволила человеку договорить до конца, а сам так и не понял что имелось ввиду.
     

Share This Page

Loading...