Рассмотрим запрос SQL ниже:Дублирование Выпуск
SELECT DISTINCT shops.*,
DA.delivery_cost,
DA.postcode
FROM shops
JOIN shops_delivery_area as DA on DA.shop_id = shops.id
WHERE DA.postcode = "Liverpool"
OR location = "Liverpool"
shops
стол
+----+----------+-----------+----------+
| id | name | location | postcode |
+----+----------+-----------+----------+
| 1 | Shop One | Liverpool | L10 |
| 2 | Shop Two | Liverpool | L16 |
+----+----------+-----------+----------+
shops_delivery_area
стол
+------------------+---------+----------+---------------+
| delivery_area_id | shop_id | postcode | delivery_cost |
+------------------+---------+----------+---------------+
| 1 | 1 | L10 | 0.00 |
| 2 | 1 | L11 | 0.00 |
| 3 | 1 | L12 | 1.00 |
| 4 | 1 | L13 | 1.00 |
| 5 | 2 | L10 | 0.00 |
| 6 | 2 | L16 | 0.00 |
| 7 | 2 | L28 | 0.00 |
+------------------+---------+----------+---------------+
Пользователь может осуществлять поиск по Postcode (например: L14
, L15
, L16
) или Место из текстового поля.
Если пользователь вводит «Ливерпуль», он найдет все магазины, расположенные в «Ливерпуле». Проблема в том, что будут повторяющиеся строки имени магазина (таблица магазинов). Как решить эту проблему?
Результат (Поиск по местоположению):
Как избежать дублирования названия магазина?
я должен делать: shops.id = shops_delivery_area.shop_id AND shops.postcode = shops_delivery_area.postcode
+----+----------+-----------+----------+---------------+----------+
| id | name | location | postcode | delivery_cost | postcode |
+----+----------+-----------+----------+---------------+----------+
| 1 | Shop One | Liverpool | L10 | 0.00 | L10 |
| 1 | Shop One | Liverpool | L10 | 0.00 | L11 |
| 1 | Shop One | Liverpool | L10 | 1.00 | L12 |
| 1 | Shop One | Liverpool | L10 | 1.00 | L13 |
| 2 | Shop Two | Liverpool | L16 | 0.00 | L10 |
| 2 | Shop Two | Liverpool | L16 | 0.00 | L16 |
| 2 | Shop Two | Liverpool | L16 | 0.00 | L28 |
+----+----------+-----------+----------+---------------+----------+
Результат (поиск по почтовому индексу L10): работают отлично, как и ожидалось
+----+----------+-----------+----------+---------------+----------+
| id | name | location | postcode | delivery_cost | postcode |
+----+----------+-----------+----------+---------------+----------+
| 1 | Shop One | Liverpool | L10 | 0.00 | L10 |
| 2 | Shop Two | Liverpool | L16 | 0.00 | L10 |
+----+----------+-----------+----------+---------------+----------+
добавьте группу на основе названия магазина. –
@GauravVashishtha Посмотрите внимательно, у меня есть 'DISTINCT' –
DISTINCT отличается от GROUP BY. DISTINCT возвращает только отдельные строки (все значения должны быть разными), а GROUP BY возвращает строки, которые имеют разные значения в полях, которые вы группируете. Например, группировка по имени магазина будет отображать только строки с отличным именем магазина. Но будьте осторожны, что для полей delivery_cost и postcode вы должны использовать функцию AGGREGATE, например. MAX (delivery_cost) –