このクエリを使用して、2つのSQLテーブルを検索します。結果を発生順に並べ替える方法を探しています。これは私の質問です:
SELECT `parent_id`
FROM wp_forum_posts
WHERE text LIKE '%{$term1}%'
UNION
SELECT `id`
FROM wp_forum_threads
WHERE subject LIKE '%{$term1}%
結果を注文するための最良の方法はどれですか?
秘訣はUNION ALL
、最初に重複を保持する(通常UNION
は重複を削除する)を使用し、次にその結果から選択することです。このクエリはそれを行う必要があります:
select * from (
select parent_id as mID, count(*) as cnt
from wp_forum_posts
where text like '%{$term1}%'
group by 1
UNION ALL
select id, count(*)
FROM wp_forum_threads
where subject like '%{$term1}%
group by 1) x
order by 2, 1
IDとparent_IDがテーブル内で重複していないと仮定します。そうでない場合、IDごとに2行を取得できます...その場合、parent_IDとIDは関連していますか?
Select mID, cnt
FROM
(SELECT `parent_id` as mID, count(`parent_ID`) as cnt
FROM wp_forum_posts
WHERE text LIKE '%{$term1}%'
Group by `parent_ID`
UNION
SELECT `id`, count(`id`) as cnt
FROM wp_forum_threads
WHERE subject LIKE '%{$term1}%
GROUP BY `id`)
Order by cnt ASC, mID