2つの動作中のSQLステートメントを1つの動作中のSQLステートメントに結合しようとしています。エラーを引き起こす複雑なMySQLステートメント
この最初のものは、すべての製品および製品が入っているお店、そして製品が持っているカテゴリを選択し、中にあるお店のために:ここでは
は別々に行われ、各作業という2つのSQL文です特定の領域。ウェブサイト上に商品を表示した後、各商品の下に商品の店舗やカテゴリを掲載するためのものです。私の上のSQL文のSELECT p.p_id, p.`p_name`, p.brand,
GROUP_CONCAT(DISTINCT CONCAT(c.c_id, ':', c.c_name) SEPARATOR ', ') as categories,
GROUP_CONCAT(DISTINCT CONCAT(s.s_id, ':', s.s_name) SEPARATOR ', ') as shops
FROM product p
INNER JOIN product_category pc on p.p_id = pc.p_id
INNER JOIN category c ON c.c_id = pc.c_id
INNER JOIN product_shop ps on p.p_id = ps.p_id
INNER JOIN shop s ON s.s_id = ps.s_id
WHERE s.street = 'college hill'
AND s.city = 'auckland'
AND s.province = 'auckland'
AND s.country = 'new zealand'
AND s.postalCode = '1011'
結果は次のようになります。
重要:私は、次のSQL文のために重要であるショップテーブルに追加緯度と経度フィールド以来持っていますこの質問の
この第2のSQL文は、this link that finds the closest 20 shops to a latlong coordinate in a table of shopsから取得されています。私は私のデータベースで動作するように適応している:
SELECT s_id, (3959 * acos(cos(radians(-36.8473223
)) * cos(radians(latitude)) * cos(radians(longitude) - radians(174.744227
)) + sin(radians(-36.8473223
)) * sin(radians(latitude)))) AS distance FROM shop HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;
それは、この結果を与える:
したがって、これら2つのSQLステートメントを結婚によって、私はお店にに最も近い製品を選択することができますウェブサイト上に商品を表示するための緯度座標、各商品の店舗およびカテゴリを表示します。
私がしようとしているのは、指定された緯度と経度座標(Googleオートコンプリート場所オブジェクトでユーザーが入力した)からショップの距離をショップ選択結果に追加することです。この質問のトップSQLステートメントだから店舗の結果では、各店舗のために5.897のようなものになります距離の結果を追加します。そして、最も近い距離の項目を返します。
SELECT p.p_id,
p.`p_name`,
p.brand,
GROUP_CONCAT(DISTINCT CONCAT(c.c_id, ':', c.c_name) SEPARATOR ', '
) as categories,
GROUP_CONCAT(DISTINCT CONCAT(s.s_id, ':', s.s_name, ':',
(3959 * acos(cos(radians(-36.8473223
)) * cos(radians(s.latitude)) * cos(radians(s.longitude) - radians(174.744227
)) + sin(radians(-36.8473223
)) * sin(radians(s.latitude)))) AS distance) SEPARATOR ', '
) as shops
FROM
product p
INNER JOIN product_category pc on p.p_id = pc.p_id
INNER JOIN category c ON c.c_id = pc.c_id
INNER JOIN product_shop ps on p.p_id = ps.p_id
INNER JOIN shop s ON s.s_id = ps.s_id HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;
私はこのエラーを取得しています:ここで
は私の現在の試みです
1583 - Incorrect parameters in the call to native function 'CONCAT'
私は、エラーを修正するために何ができますか?以下の答えから
結果:
うわー、素晴らしい、ありがとう。何らかの理由で、私は結果に1行しか戻っていません。期待された結果は、私はデータベースに戻ってきたその行のように、すべての製品を取得することです。これは約16の製品なので、戻って来たもののような16行です。データベースには2店舗しかありませんが、どちらも戻ってきた製品の結果に戻ってきました。すべての製品は、2つのショップのいずれか、またはその両方にあります。私は他の製品がなぜ結果に返されないのかを理解する必要があります。なぜあなたはそれが1列の感謝を返すだけの理由を知っているか教えてください! – BeniaminoBaggins
返信する結果は、私の質問 – BeniaminoBaggins
@Beniamino_Bagginsの下にGROUP BYを追加して掲載されています。あなたの元のクエリはグループbyを持っていなかったので、group_concatで常に1つの行だけを返します。やってみよう。 – DRapp