6

これら 2 つのクエリを組み合わせる適切な構文は何ですか?

SELECT clicks FROM clicksTable WHERE clicks > 199 ORDER BY clicks ASC LIMIT 1

SELECT clicks FROM clicksTable ORDER BY clicks DESC LIMIT 1

私は試した:

SELECT clicks FROM clicksTable WHERE clicks > 199 ORDER BY clicks ASC LIMIT 1
UNION
SELECT clicks FROM clicksTable ORDER BY clicks DESC LIMIT 1;

しかし、「UNION と ORDER BY の使用方法が正しくありません」というメッセージが表示されます。

EDIT さらに、結果を1行で返したいです。たとえば、phpの値にアクセスできるように

$row['nextclick'] and $row['topclick'] 

サイモンの提案から、単一行のデータを返したいので UNION を使用しないでください

4

3 に答える 3

16

ORDER BYあなたは最初SELECTにそれをすることはできませんUNION

編集
ただし、できます

個々の SELECT に ORDER BY または LIMIT を適用するには、SELECT を囲む括弧内に句を配置します。

MySQL UNION ドキュメントのように

(SELECT a FROM t1 WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
UNION
(SELECT a FROM t2 WHERE a=11 AND B=2 ORDER BY a LIMIT 10);

次に、SQLを作成します

(SELECT clicks FROM clicksTable WHERE clicks > 199 ORDER BY clicks ASC LIMIT 1)
UNION
(SELECT clicks FROM clicksTable ORDER BY clicks DESC LIMIT 1);

編集2
で戻るにはarray

SELECT (SELECT clicks 
        FROM clicksTable 
        WHERE clicks > 199 
        ORDER BY clicks ASC 
        LIMIT 1) AS NextClick,
       (SELECT clicks 
        FROM clicksTable 
        ORDER BY clicks DESC 
        LIMIT 1) AS TopClick;
于 2013-01-11T15:49:50.187 に答える
3
SELECT clicks FROM
    (SELECT clicks FROM clicksTable WHERE clicks > 199 ORDER BY clicks ASC LIMIT 1) A
UNION
SELECT clicks FROM
    (SELECT clicks FROM clicksTable ORDER BY clicks DESC LIMIT 1) B;
于 2013-01-11T15:49:54.620 に答える
1

まず、 と のどちらが必要ですunionunion all?

問題はorder by前半部分です。サブクエリを使用して、これを修正できます。

(select * from (SELECT clicks FROM clicksTable WHERE clicks > 199 ORDER BY clicks ASC LIMIT 1))
UNION ALL
(select * from (SELECT clicks FROM clicksTable ORDER BY clicks DESC LIMIT 1))

union式でorder byは、最後にのみ許可され、式全体に適用されます。

于 2013-01-11T15:51:09.507 に答える