0

Есть запрос SQL:

SELECT a.virtuemart_product_id as 'vm_product_id', a.product_sku as 'vm_product_sku', b.product_name as 'vm_product_name', c.product_price as 'cost', c.product_price as 'price', a.low_stock_notification as 'vm_low_stock_alert', f.file_url as 'vm_product_picture', d.virtuemart_category_id as 'vm_category_id', g.parent_id as 'vm_subcategory_id', a.product_in_stock as 'vm_product_in_stock', b.product_s_desc as 'vm_product_s_desc', '1', b.product_desc as 'vm_product_desc', a.product_sales as 'vm_product_sales', b.slug as 'vm_slug' 
FROM `gk1zd_virtuemart_products` as a  
LEFT JOIN `gk1zd_virtuemart_products_ru_ru` as b ON b.virtuemart_product_id = a.virtuemart_product_id 
LEFT JOIN `gk1zd_virtuemart_product_prices` as c ON c.virtuemart_product_id = a.virtuemart_product_id 
LEFT JOIN `gk1zd_virtuemart_product_categories` as d ON d.virtuemart_product_id = a.virtuemart_product_id 
LEFT JOIN `gk1zd_virtuemart_product_medias` as e ON e.virtuemart_product_id = a.virtuemart_product_id 
LEFT JOIN `gk1zd_virtuemart_medias` as f ON f.virtuemart_media_id = e.virtuemart_media_id 
LEFT JOIN `sma_categories` as g ON g.id = d.virtuemart_category_id 
LEFT JOIN `sma_products` as h ON h.id = a.virtuemart_product_id 
WHERE a.published = 1 AND h.id IS NULL

Выборка из БД Необходимо пропустить дублирующие значения, например: первую запись с id=2 запрос должен вывести на экран, если дальше есть поле с id=2 запрос должен запись пропустить(не выводить).

DISTINCT, GROUP BY - не подходит.

Akina
  • 31,807
mVoid
  • 1
  • 1
    В запросе отсутствует ORDER BY - следовательно, нет никаких "первая" и "дальше". – Akina Jun 27 '17 at 10:50
  • ORDER BY - так само как и GROUP BY тут ничем не поможет. – mVoid Jun 27 '17 at 10:57
  • https://ru.stackoverflow.com/questions/496515/ только определитесь какую строку считать минимальной или максимальной, т.е. какой порядок сортировки задать. И еще, как вариант, посмотреть подклеивание какой из таблиц увеличивает количество записей и что нибудь с ней придумать. И кстати, GROUP BY так же может помочь, тут же все поля кроме последнего одинаковы, значит можно сделать GROUP BY по всем этим полям, а от последнего взять MIN/MAX – Mike Jun 27 '17 at 11:08
  • @Mike поля одинаковы кроме vm_product_picture, если юзать GROUP BY id, то в запросе ошибку выдает, просит добавить еще 4 поля тобишь AND или через запятую. Вот нашел вроде то что мне нужно [https://ru.stackoverflow.com/questions/193369/] – mVoid Jun 27 '17 at 11:16
  • @mVoid Ну да, я и говорю что указать в group by все поля, которые у записей одинаковы, т.е. перечислить их все через запятую. Либо от всех полей кроме id взять например max() максимум от одинаковых значений равен этому самому значению :) – Mike Jun 27 '17 at 11:19
  • @Mike Все равно ошибку выдает запрос: #1055 - Expression #7 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'visionua.f.file_url' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by – mVoid Jun 27 '17 at 11:25
  • так надо от него то же взять минимум min(visionua.f.file_url) ну или максимум, смотря какое значение больше нравится – Mike Jun 27 '17 at 11:27
  • @Mike Спасибо, таки удалось отсеять повторяющейся ID товаров, непосредственно MIN(f.file_url) Можете продублировать совет, отмечу как правильный. – mVoid Jun 27 '17 at 11:41

1 Answers1

0

Возможно не самое лучшее решение, но хоть что-то. Возьми эту таблицу, вычти из нее таблицу DISTINCT ID. Получишь строки - дубликаты. Затем эти строки дубликаты вычти из основной таблицы.