2012-02-25 15 views
1

私のサイトでは、訪問者が特定のものを検索できるキーワード検索があります。私のmsysqlデータベースには15のテーブルがあり、検索機能ではUNION ALLを使用してすべてのテーブルを同時に検索することができます。問題はすべて結果が昇順であることです。結果を降順で取得するにはどうすればいいですか?このような場合には複数のテーブルのデータベース結果を降順で表示する方法

SELECT * 
FROM table1 
WHERE keyword LIKE %s OR id LIKE %s 

UNION ALL 

SELECT * 
FROM table2 
WHERE keyword LIKE %s OR id LIKE %s 

UNION ALL 

SELECT * 
FROM table3 
WHERE keyword LIKE %s OR id LIKE %s 

答えて

2
SELECT * 
FROM 
    (SELECT * 
    FROM table1 
    WHERE keyword LIKE '%s' OR id LIKE '%s' ---notice the quotes 
    UNION ALL SELECT ....... 
) AS tmp 
ORDER BY keyword DESC 
+0

はい - 詳細については、さらに多くの例があり、MySQLのマニュアルを、チェックアウト: http://dev.mysql.com/doc/refman/5.0/en/union.html – Daan

+0

私はしましたすでにこれを試して、エラーメッセージが表示され続けています。SELECT * FROM table1 WHEREキーワードLIKE%sまたはID LIKE%s ORDER BY ID DESC – Will

+0

あなたの選択で*を選択するのではなく、col1、col2を選択してみましたか? –

3

私はデータベースを正規化し、同じテーブル内のすべてのキーワードを入れて、あなたをお勧めしたいです。 タイプに応じてキーワードを区切る場合は、typeという列を使用して、を示します。

次のクエリは、必要な処理を行います。

SELECT * 
FROM ((SELECT * 
     FROM table1 
     WHERE keyword LIKE '%s' 
       OR id LIKE '%s') 
     UNION ALL 
     (SELECT * 
     FROM table2 
     WHERE keyword LIKE '%s' 
       OR id LIKE '%s') 
     UNION ALL 
     (SELECT * 
     FROM table3 
     WHERE keyword LIKE '%s' 
       OR id LIKE '%s')) AS bigtable 
ORDER BY `id`; 
関連する問題