2011-11-14 10 views
0

MySQLでは、特定の値を除いた2つの値(制限2)を選択できますか?私たちには在庫があるデータベースがあります。マシンの更新が行われると、ユーザーに電子メールを送りたいと思っています。しかし、この同じインベントリシステムでは、実際のユーザーではなく、電子メールを受信しない「誰も」(約10人)と「mainconf」(1人)のユーザーがいます。特定の値を除外して列を選択する方法

基本的に、特定の値(つまり「誰も」)がプルされないようにする2つの値(日付順、その方法を知っています)を取得します。このような

SELECT user from data ORDER by checkup_date WHERE data.name != "nobody" AND WHERE data.name != "mainconf" AND WHERE data.name != "testing" ASC limit 2 
+0

照会しているテーブルにSHOW CREATE TABLEを追加してください。 – RolandoMySQLDBA

答えて

2

何かが:

SELECT value1, value2 FROM tablename 
WHERE tablename.name != "nobody" 
AND tablename.name != "mainconf" LIMIT 2; 
1

あなたのクエリが近いですが、WHEREを繰り返し、WHERE後に注文を入れないでください:

だから私のクエリは次のようになり

SELECT user from data WHERE name <> "nobody" AND name <> "mainconf" AND name <> "testing" ORDER by checkup_date ASC limit 2 

または:

SELECT user from data WHERE name not in ("nobody" ,"mainconf", "testing") ORDER by checkup_date ASC limit 2 
0

あなたはこのような何かを試みることができる:あなたは、在庫表はサブクエリをサポートするために、右のインデックスを持っていることを確認しなければなりません

SELECT B.* FROM 
(SELECT X.id 
FROM 
    (SELECT id FROM inventory 
    WHERE username IN ('nobody','mainconf') 
    ORDER BY date DESC LIMIT 2) X 
    LEFT JOIN 
    (SELECT id FROM inventory 
    WHERE username IN ('nobody','mainconf')) Y 
    USING (id) WHERE Y.id IS NULL 
) A 
INNER JOIN inventory B USING (id); 

を:

ALTER TABLE inventory ADD INDEX date_id_ndx (date,id); 
ALTER TABLE inventory ADD INDEX username_id_ndx (username,id); 
ALTER TABLE inventory ADD INDEX username_date_id_ndx (username,date,id); 

LEFT JOINは日付別に並べられた鍵であります除外すべきもののすべてのキーに対してLIMIT 2を指定します。

試してみてください!

+0

神聖なモリー、なぜそんなに複雑ですか?このすべてのニーズは単純な 'WHERE NOT IN()'です... –

+0

このクエリはサブクエリ 'A'のために2つのキーを取得しようとします。次に、メインテーブルへの2つのキーのINNER JOIN。私はこれを前にしています:http://stackoverflow.com/questions/5983156/fetching-a-single-row-from-join-table/6023217#6023217 – RolandoMySQLDBA

関連する問題