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

Тема в разделе "Программирование", создана пользователем shurikkan, 10.02.2014.

  1. shurikkan
    Offline

    shurikkan Russian Joomla! Team Команда форума

    Регистрация:
    01.09.2011
    Сообщения:
    1 856
    Симпатии:
    162
    Пол:
    Мужской
    Нужно сделать выборку из нескольких таблиц базы.
    Проблема в том, что в одной из таблиц при сопоставлении находится несколько записей и из-за этого строки на выдаче дублируются. Нужно выбрать только одну.
    До сих пор путаюсь в 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 Местный Команда форума

    Регистрация:
    31.05.2009
    Сообщения:
    3 209
    Симпатии:
    335
    Пол:
    Мужской
    Код (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. shurikkan
    Offline

    shurikkan Russian Joomla! Team Команда форума

    Регистрация:
    01.09.2011
    Сообщения:
    1 856
    Симпатии:
    162
    Пол:
    Мужской
    Человек один тут намекнул, что дело в правильной расстановке JOIN - LEFT, RIGHT, INNER.
    К сожалению, лень не позволила человеку договорить до конца, а сам так и не понял что имелось ввиду.
     

Поделиться этой страницей

Загрузка...