laravel 5.2 でシステムを作っていたところ、 LEFT JOIN
を使った問い合わせ(SQL実行)をしたら、 id
カラムが取れなくなりました。 そのときの対処法を紹介します。
「SQL」タグアーカイブ
Laravel5 実行されるSQL を出力する
初めての groonga – SQL と比較する
会社で groonga を使うことになりました。 groonga でないと取得できないデータがあったんです。
groonga も含め 全文検索エンジンを使うのは初めてだったので、 公式ドキュメントを見ながら探っていきました。 データベースで使用する SQL と groonga のクエリを比較してみると次のようになりました。 もともと別物なので参考程度に見ていただければと思います。
SELECT
データを取得するときは、 Database でも groonga でも SELECT
を使います。 でも、構文の構成はだいぶ違います。 groonga では、次のような命令になります。
1 |
select --table Site --query title:@test --output_columns _id,_score,title --sortby -_score,_id |
簡単に比較すると次の表のようになります。
Database | groonga | |
---|---|---|
表示カラム | (select の後ろに羅列) |
––output_columns |
テーブル | from |
––table |
検索条件 | where |
––filter , ––query , ––match_column , ––scorer |
順序指定 | order by |
––sortby |
オフセット | offset |
––offset |
件数指定 | limit |
––limit |
グループ化 | group by |
––drilldown (drilldown したときの件数指定などは下の説明を参照) |
論理演算子 | and , or |
&& , || |
補足説明
- ––output_columns
-
検索結果に表示するカラムを指定する。カンマで区切ることにより、複数カラムを指定できる。
1select --table Site --output_columns column1,column2 - ––query
-
全文検索を行う。
1select --table Site --query title:@thistitle カラムについて 文字列 “this” の全文検索を行う。
- ––match_columns, ––query
-
検索結果に含めるカラムを指定する。複数指定もできる。
1select --table Site --match_columns title --query this––query
と一緒に使い、 title カラムについて 文字列 “this” の全文検索を行う。 - ––filter
-
条件を指定する。 javascript など のように、 “
==
”, “<=
“, “>
” などを使うことができる。 AND, OR は&&
,||
で表現できる。1select --table Site --filter "_id <= 1" --output_columns _id,_key - ––drilldown
-
バージョン4.0.1 の資料を見るかぎり、 drilldown に指定したそれぞれのカラムについてグループ化した結果が表示される。 column_1 と column_2 を指定していれば、 column_1 だけでグループ化した結果と、 column_2 でグループ化した結果が続けて表示される。
ORDER BY column_1, column_2
のようなことはできない。drilldown の結果に対する件数指定(オフセットなど)は下記のように、 通常の
––sortby
,––offset
,––limit
の頭にdrilldown
をつけて指定する。 drilldown した結果だけがほしければ、––limit
に0
を指定して出てくる通常カラムを制限する。1select --table Site --limit 0 --drilldown country --drilldown_sortby _nsubrecs --drilldown_limit 2 --drilldown_offset 2
特殊カラム
カラム名 | 説明 |
---|---|
_id | 検索時に groonga が割り当てるID。 |
_key | 主キーを格納するカラム。 |
_score | (Oracle DB でいう ROWNUM のような) 検索結果に含まれる仮想カラム。全文検索の条件に合致するレコードほど高い数値が入る。 |
_nsubrecs | drilldown を使った場合に、 drilldown した結果件数が格納されるカラム。 SELECT COUNT(1) FROM … に似ている。 |