1

2 つの MySQL ステートメントをマージしようとしています。これはほぼ解決していると思いますが、以下の太字のテキストを参照して、「#1054 - 'field list' の不明な列 'lat'」が表示されます。

latlngのテキストを ""、''、さらには `` で囲んでみましたが、効果はありませんでした。

SELECT post_attributes_3.value AS name, clean, post_attributes.value AS lat, post_attributes_1.value AS lng, post_attributes_2.value AS category, ( 3959 * acos( cos( radians('%s') ) * cos( radians( **lat** ) ) * cos( radians( **lng** ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( **lat** ) ) ) ) AS distance
FROM post_attributes AS post_attributes_3 INNER JOIN ((post_attributes AS post_attributes_1 INNER JOIN (posts INNER JOIN post_attributes ON posts.id = post_attributes.post_id) ON post_attributes_1.post_id = posts.id) INNER JOIN post_attributes AS post_attributes_2 ON posts.id = post_attributes_2.post_id) ON post_attributes_3.post_id = posts.id
WHERE (((post_attributes_3.name)="name") AND ((post_attributes_2.name)="category_id") AND ((post_attributes.name)="lat") AND ((post_attributes_1.name)="lng"))
HAVING distance < '%s' ORDER BY distance LIMIT 0 , 20;

以下に組み合わせた2つのSQLステートメント:

SELECT name, clean, lat, lng, category, ( 3959 * acos( cos( radians('%s') ) * cos( radians( lat ) ) * cos( radians( lng ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( lat ) ) ) ) AS distance FROM categorize HAVING distance < '%s' ORDER BY distance LIMIT 0 , 20;

SELECT post_attributes_3.value AS name, clean, post_attributes.value AS lat, post_attributes_1.value AS lng, post_attributes_2.value AS category
FROM post_attributes AS post_attributes_3 INNER JOIN ((post_attributes AS post_attributes_1 INNER JOIN (posts INNER JOIN post_attributes ON posts.id = post_attributes.post_id) ON post_attributes_1.post_id = posts.id) INNER JOIN post_attributes AS post_attributes_2 ON posts.id = post_attributes_2.post_id) ON post_attributes_3.post_id = posts.id
WHERE (((post_attributes_3.name)="name") AND ((post_attributes_2.name)="category_id") AND ((post_attributes.name)="lat") AND ((post_attributes_1.name)="lng"));

これら 2 つの MySQL ステートメントは個別に問題ありませんが、AS ステートメントの使用に関係している可能性があります。

更新: ご協力ありがとうございます。しかし、この選択クエリの使用方法のために、MySQL ビューを作成し、それを使用して最初の SQL コマンドと同様の SQL コマンドを実行することにしました。

4

1 に答える 1

1

エイリアスを実際の列名に置き換えてみてください。

SELECT post_attributes_3.value AS name, clean, post_attributes.value AS lat, post_attributes_1.value AS lng, post_attributes_2.value AS category, ( 3959 * acos( cos( radians('%s') ) * cos( radians( post_attributes.value ) ) * cos( radians( post_attributes_1.value ) - radians('%s') ) + sin( radians('%s') ) * sin( radians( post_attributes.value ) ) ) ) AS distance
FROM post_attributes AS post_attributes_3 INNER JOIN ((post_attributes AS post_attributes_1 INNER JOIN (posts INNER JOIN post_attributes ON posts.id = post_attributes.post_id) ON post_attributes_1.post_id = posts.id) INNER JOIN post_attributes AS post_attributes_2 ON posts.id = post_attributes_2.post_id) ON post_attributes_3.post_id = posts.id
WHERE (((post_attributes_3.name)="name") AND ((post_attributes_2.name)="category_id") AND ((post_attributes.name)="lat") AND ((post_attributes_1.name)="lng"))
HAVING distance < '%s' ORDER BY distance LIMIT 0 , 20;

列エイリアスの使用方法WHEREと使用方法を示す SQL フィドルHAVING

最後のクエリはエラーを引き起こします。これはあなたが抱えている問題でもあります。

于 2012-09-21T10:43:08.213 に答える