Рассмотрим запрос 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 |
+------------------+---------+----------+---------------+
Пользователь может выполнять поиск по почтовому индексу (например, 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 |
+----+----------+-----------+----------+---------------+----------+