2016-03-26 5 views
1

イムを持つ不明な集計列(Laravelとその雄弁ORMを使用して)PHP + MySQLでは、ロケーションベースのイベント検索を構築しようとしている句

これは、私が使用していますクエリです:

select 
    events.*, 
    (3959 * acos(cos(radians(50.5)) * cos(radians(addresses.latitude)) * cos(radians(addresses.longitude) - radians(9.50)) + sin(radians(50.5)) * sin(radians(addresses.latitude)))) AS distance 

from 
    `events` inner join `addresses` on `events`.`address_id` = `addresses`.`id` 
having 
    `distance` <= 10 
order by 
    `id` desc limit 15 offset 0 

イム距離の列が「select文」に入っていても、なぜこのエラーがポップアップしているのか不思議です。

"SQLSTATE[42S22]: Column not found: 1054 Unknown column 'distance' in 'having clause' (SQL: select count(*) as aggregate from `events` inner join `addresses` on `events`.`address_id` = `addresses`.`id` having `distance` <= 10 order by `id` desc)" 

これは私がベースのクエリにスコープを追加するために使用PHPコードです:

$selectDistance = 
     '(3959 * acos(cos(radians(' . $latitude . ')) ' . 
     '* cos(radians(addresses.latitude)) ' . 
     '* cos(radians(addresses.longitude) - radians(' . $longitude . ')) ' . 
     '+ sin(radians(' . $latitude . ')) ' . 
     '* sin(radians(addresses.latitude)))) AS distance'; 

    $query->select(DB::raw('events.*, ' . $selectDistance)); 
    $query->join('addresses', 'events.address_id', '=', 'addresses.id'); 
    $query->having('distance', '<=', $km); 

はどうもありがとうございました:)

+0

'ONLY_FULL_GROUP_BY'システム・パラメータは、この効果を持っているかどうだろうか。 –

答えて

2

をエラーメッセージから:

"列が見つかりません:1054不明な列 'distance' in '節を持つ'(SQL:集計としてcount(*)をから選択してください)内部 は、addresseseventsに参加します。 address_id = addressesid私たちは、以下の

SQL得ることができます「

id DESCによって distance < = 10順序を持つ:。

select count(*) as aggregate 
from `events` inner join `addresses` on `events`.`address_id` = `addresses`.`id` 
having `distance` <= 10 
order by `id` desc 

distanceが選択リストにないを

1

HAVING節は、WHEREキーワードで集約関数を使用できないため、SQLに導入されました。あなたのクエリには、SELECT文またはHAVING句の中に集計関数はありません。したがって、HAVING句が形式の下で使用されるべきである

having 
    `distance` <= 10 

where 
    `distance` <= 10 

に変更してみてください。

オペレータは=、>、<、< =、電気ショック療法であり得る
HAVING aggregate_function(column_name) operator value 

....

またPHPコードはまた、それに応じて変更する必要があります。

以下のSQLチュートリアルのリンクは、SQLのHAVING節の使用方法を理解するのに役立ちます。

http://www.w3schools.com/sql/sql_having.asp

関連する問題