
MySQLの事で質問です。
テーブル1~4を結合してフィールド「comment」を検索
する時にフィールド「postDate」の降順でソートしたい
のですがエラーが出ました。
「SQLコマンド」
select text from table1
union all select comment from table2
union all select comment from table3
union all select comment from table4
where match(commentIndex) against("検索ワード" in boolean mode)
order by postDate desc;
試しに
union all select comment from table2
union all select comment from table3
union all select comment from table4
の部分を削除して実行してみた所、成功しました。
後、order by postDate desc;のみ削除した場合でも成功しました。
エラーの内容はこれです↓↓
Unknown column 'postDate' in 'order clause'
フィールド「postDate」は存在します。
(varchar型何ですが、それがいけないと思い
date型やdatetime型と変えてみましたがダメでした)
何とかソートしたいのですがどうすればいいのでしょうか?
No.1ベストアンサー
- 回答日時:
UNIONつまり集合演算子を使った場合、SELECTするカラム以外のソートはできません。
これは、MySQLに限った話ではなく、ANSI/ISO SQLそのものの仕様です。
postDate でソートするなら、SELECTするカラムに postDate が無くてはいけません。
(もちろんUNIONする全テーブルに無いとダメです)
さて、ご質問に対しての回答は以上ですが、以下、Tritonn環境がないので、想像で書きます。
全文検索用のcommentIndex、これも各テーブルにあるものですよね?
だとしたら、ご質問の書き方だとこうなります。
table1→無条件に全表走査(遅い)
table2→無条件に全表走査(遅い)
table3→無条件に全表走査(遅い)
table4→ここだけ全文検索(高速)
各テーブルから検索ワードで全文検索したいのであれば
select text from table1
where match(commentIndex) against("検索ワード" in boolean mode)
union all select comment from table2
where match(commentIndex) against("検索ワード" in boolean mode)
union all select comment from table3
where match(commentIndex) against("検索ワード" in boolean mode)
union all select comment from table4
where match(commentIndex) against("検索ワード" in boolean mode)
にならないといけないと思います。
上記の書き方で初めて
table1→全文検索(高速)
table2→全文検索(高速)
table3→全文検索(高速)
table4→全文検索(高速)
となるのでは?
「それじゃsennaが4回も呼ばれるじゃないか」と思われるかもしれませんが、3回全表走査するよりは、よっぽど高速でしょう。
(各テーブルの件数にもよると思いますが)
インラインビューを使えばsenna1回で書けますけど、せっかくの全文検索の意味がなくなる(却って劇遅になります)し、そもそも、インラインビューでsennaを使うと多分構文エラーになると思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
mysqlがインストールされている...
-
mysqlのupdate構文についての質...
-
エラー 1068 (42000): 複数の主...
-
データベースの接続に失敗して...
-
#1062 - '0' は索引 'PRIMARY' ...
-
[XAMPP Control Panel v3.2.4] ...
-
同一日に複数レコードがある場...
-
MAMP 99ドル約1.6万円 高い...
-
あってますか?SQL
-
WHERE `年月日` = '晴' OR `年...
-
SQLです教えてくださいお願いし...
-
SQLを作ったのですがうまくいき...
-
(初心者)MySQLやmaraDBで、crea...
-
SQLです教えてくださいお願いし...
-
SQLです教えてくださいお願いし...
-
SQLです教えてください。
-
SQLです教えてくださいお願いし...
-
SQLです教えてくださいお願いし...
-
SQLです教えてくださいお願いし...
-
utf8bomとutf8mb4の違いがいま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
#1062 - '0' は索引 'PRIMARY' ...
-
mysqlがインストールされている...
-
エラー 1068 (42000): 複数の主...
-
mysqlのupdate構文についての質...
-
SQLでカラムを追加し、条件に合...
-
SQLです教えてくださいお願いし...
-
SQLです教えてくださいお願いし...
-
テーブル名が可変の場合のクエ...
-
utf8bomとutf8mb4の違いがいま...
-
(初心者)MySQLやmaraDBで、crea...
-
MAMP 99ドル約1.6万円 高い...
-
SQLを作ったのですがうまくいき...
-
SQLで漢字名称を都道府県や市区...
-
同一日に複数レコードがある場...
-
SQLです教えてください。
-
SQLです教えてくださいお願いし...
-
SQLです教えてくださいお願いし...
-
あってますか?SQL
-
SELECT * FROM `生徒名簿` INNE...
-
初心者Mysqlの関数のsubstring...
おすすめ情報