2016-07-13 2 views
1

私は以下のように私のユーザテーブルにユーザのリストを持っています。 useridがに等しくなるまで、私のテーブルからユーザーの数を見つける必要があります。条件に達するまでクエリを選択します

ここで答えは(3)です。しかし、どのように私はMySQLのクエリを見つけることができます。何か案が?

userid name 
--------------- 
10  aaa 
30  bbb 
100  ccc 
60  ddd 
+0

と最小行数を選択し、その後、これは行番号を作成することです解決する

一つの方法は、とにかくインデックス化 'UserId'フィールドですか? –

+0

または、あなたの質問は他のフィールドからの注文ですか? –

+0

テーブルに2列しかない場合、なぜuseridがソートされないのですか? – CSK

答えて

0

これは数値の「最初の」インスタンスとしてMySQLで行うことは困難であるが突き止めることが困難であり得ます。ユーザーID = 100

select min(row_number) from 
(
SELECT @rownum:[email protected] + 1 as row_number, 
     p.* 
FROM p, 
(SELECT @rownum := 0) r 
) g 
where userid = 100 

Here is a functional example

+0

恐ろしいです。どうもありがとうございます :)。 – Naren

0

これはあなたの期待を達成するための回避策の1つです。場合

SET @row_number:=0; 

SELECT A.row_number FROM (
    SELECT Userid, name, @row_number:[email protected]_number+1 AS row_number 
    FROM UserDetail 
) AS A 
WHERE A.Userid = 100; 

Working DEMO

UserIdはないユニークなIDであれば、それはあなたが追加することができ、繰り返すことができORDER BYLIMIT 1

SET @row_number:=0; 

SELECT A.row_number FROM (
    SELECT Userid, name, @row_number:[email protected]_number+1 AS row_number 
    FROM UserDetail 
) AS A 
WHERE A.Userid = 100 
ORDER BY A.row_number 
LIMIT 1; 

Working DEMO

与えられたデータと

サンプル実行:

--DROP TABLE UserDetail; 

CREATE TABLE UserDetail (Userid INT, name VARCHAR (50)); 

INSERT INTO UserDetail (Userid, name) VALUES 
(10 , 'Aaa'), 
(30 , 'Bbb'), 
(100, 'Ccc'), 
(60 , 'ddd'); 

SET @row_number:=0; 

SELECT A.row_number FROM (
    SELECT Userid, name, @row_number:[email protected]_number+1 AS row_number 
    FROM UserDetail 
) AS A 
WHERE Userid = 100; 
+0

UserID = 100のインスタンスが複数存在する場合、これは機能しません。最小値を選択する必要があります。しかし、素晴らしい解決策!私たちはまさに同時にこのことに取り組んできたに違いありません! – EoinS

+0

@EoinS: 'UserId'の考え方はユニークですが、とにかく' ORDER BY'と 'LIMIT 1'で重複した' Userid'を扱いました – Arulkumar

関連する問題