は、以下の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
テーブルテーブル
+------------------+---------+----------+---------------+
| 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
)で検索することができます
+----+----------+-----------+----------+
| id | name | location | postcode |
+----+----------+-----------+----------+
| 1 | Shop One | Liverpool | L10 |
| 2 | Shop Two | Liverpool | L16 |
+----+----------+-----------+----------+
shops_delivery_area
をまたは場所をテキストボックスから選択します。
「Liverpool」にユーザーが入力すると、「Liverpool」にあるすべてのお店が検索されます。問題は、ショップ名(店舗テーブル)の重複した行があることです。この問題を解決するには?
結果(所在地で検索):お店の名前の重複を避けるために、どのように
?
私が行う必要があります。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は、グループ化するフィールドに異なる値を持つ行を返します。たとえば、shopnameでグループ化すると、異なるショップ名の行のみが表示されます。ただし、delivery_costフィールドとpostcodeフィールドでは、AGGREGATE関数を使用する必要があります。 MAX(delivery_cost) –