2013-12-16 41 views
1

這是我正在使用的查詢工作正常,但我希望結果集按字母順序排序在同一列中出現的第二個值。選擇單個值,但排序在同一列中發生的另一個值

SELECT userid 
FROM my_table 
WHERE value = $corrected_gradyear 
and attributeid = 4 

表的設置是這樣的

attributeid userid value 
3   1231 maidenname 
2   1231 lastname 
4   1231 1980 
5   1231 address 
8   1231 phone 
9   1231 email 
3   5  maidenname 
2   5  lastname 
4   5  1978 
5   5  address 
8   5  phone 
9   5  email 

我只是想用戶ID的ID,但我希望他們能按字母順序屬性Id 3(姓)進行排序。

回答

1

這是你想要的嗎?

select t1.userid,t1.value as year,t2.value as maidenname from my_table t1 
join my_table t2 on t2.userid = t1.userid and t2.attributeid=3 
where t1.attributeid=4 
order by t1.value,t2.value 
+0

並沒有爲我工作...沒有我需要的東西,如訂單的值,其中屬性id = 3 – user3108501

+0

告訴我你想要從主題表中選擇要訂購的東西(打印結果)。 – BaBL86

+0

我想選擇畢業年份相同的所有用戶標識,然後按值maidenname(attributeid 3)排序結果。 – user3108501

0

這只是一張可怕的桌子。

我猜你必須做的是:

SELECT VALUE as MaidenName 
FROM my_table WHERE attributeID = 3 
AND UserID IN 
(SELECT userid 
    FROM my_table 
    WHERE value = $corrected_gradyear 
    and attributeid = 4) 
ORDER BY MaidenName 
+0

這也行不通,我認爲用戶標識不在結果集中。我的While循環訪問使用此代碼的結果集:$ Rowone [userid] – user3108501

+0

我正在訪問一個PHPlist表... – user3108501

+0

我得到這個錯誤 - 通知:未定義的索引:userid在.... – user3108501

0
SELECT tUsers.userid 
FROM my_table tUsers 
INNER JOIN my_table tMaidenNames ON tMaidenNames.userid = tUsers.userid AND tMaidenNames.attributeid = 3 
WHERE tUsers.value = $corrected_gradyear 
AND tUsers.attributeid = 4 
ORDER BY tMaidenNames.value ASC 

http://sqlfiddle.com/#!2/9dc63/2

0
SELECT userid 
    , MAX(CASE WHEN attributeid = 4 THEN value END) corrected_grad_year 
    , MAX(CASE WHEN attributeid = 3 THEN value END) maidenname 
    FROM eav_hell 
GROUP 
    BY userid 
ORDER 
    BY whatever; 
相關問題