こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

-広告-

解決済みの質問

MySQLのレコードの並び変えについて

開発環境:
MySQL 5.0.95
PHP Version 5.3.3

以下のテーブルがあるとします。

id,title,content
1,野菜,野菜について
2,りんご,果物について
3,ニンジン,野菜について
4,野菜,玉ねぎについて

上記のようなテーブルで「野菜」と検索したときの並び順についてです。
結果として
初めに「title」にあったものを表示、次に「content」にあったものを表示させたいです。

【検索結果】
1,野菜,野菜について
4,野菜,玉ねぎについて
3,ニンジン,野菜について


SELECT * FROM hoge title LIKE 野菜
UNION
SELECT * FROM contents LIKE 野菜
とすると、「1,野菜,野菜について」が重複されてしまします。

参考にしたページ
http://q.hatena.ne.jp/1331450527
http://q.hatena.ne.jp/1336143424


最初にtitleで合致したidをとっておき、それ以外をcontentと合致するか検索する
という方法も考えたのですが、可能であれば1回のSQLでできたら嬉しいです。

どなたか教えていただけませんでしょうか。
何卒よろしくお願い致します。

投稿日時 - 2015-12-19 16:45:25

QNo.9098209

困ってます

質問者が選んだベストアンサー

mysqlのバージョンが古いですが、最新のバージョンだと普通に1行になるみたいですけど。
union allでもしないかぎり最初のテーブルでみるので、title, contentとか関係なく一緒になります。
微妙に値がちがう(空白があるとか)そういうのじゃないんでしょうか?
カラム名が問題なら as とかでrenameしてunionするとどうなるのでしょう?

投稿日時 - 2015-12-20 20:35:24

お礼

ご回答いただきましてありがとうございました。

UNIONとUNION ALLの区別がよくわかっていないませんでした。
教えていただいた通りUNIONで問題ありませんでした。
下記のSQLで取得できました。

SELECT * FROM `hoge` WHERE title LIKE '%野菜%'
UNION
SELECT * FROM `hoge` WHERE content LIKE '%野菜%'

実際のテーブルでSQLを走らせると問題ないのですが、
PHPから取得できないのでさらに確認しています。
希望どおりの方法を教えていただきありがとうございました。

投稿日時 - 2015-12-23 14:08:49

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(1)

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-