2012-09-19 43 views
0

只需要一些SQL語句的幫助,我有一個包含大量用戶數據的表,目前我正在通過rowid降序獲取所有數據。不過,我需要修改數據顯示如下的方式:SQL選擇與條件匹配的數據,首先顯示,然後排序剩餘數據

該表具有哪些用戶可以指定自己的值或者可以選擇默認值的字段。選擇默認值時,該字段會自動填充「randomstring_standardefaultvalue」。

所以基本上我需要選擇用戶沒有選擇默認值的所有數據,並讓它們按降序排列,然後抓取用戶選擇默認值的所有行,並在第一組數據排序後填充它們通過降序rowid。

我現在的SQL看起來是這樣,

$query = "SELECT * FROM userform ORDER BY _rowid_ DESC LIMIT {$offset}, {$pl};"; 

表數據:

rowid date username defaultoruniquevalue member etc... 

幫助將不勝感激。 謝謝!

答:

SELECT *, IF(defaultoruniquevalue LIKE CONCAT('%','defaultstring','%'), 1, 0) AS uses_default 
FROM table 
ORDER BY uses_default ASC, _rowid_ DESC 
LIMIT {$offset}, {$pl 
+0

最大的問題是,存儲的數據無論是默認值還是唯一的defaultoruniquevalue行都會附加一個隨機字符串。 因此,我們有一組數據如下:randomstring_default randomstring_default randomstring_default randomstring_unique1 randomstring_unique2 randomstring_unique3 randomstring_unique4 – Sean

回答

1

我希望我正確理解你的問題,但它聽起來像你需要一個WHERE子句添加到您的查詢:

SELECT * 
FROM userform 
WHERE defaultoruniquevalue != "default" 
ORDER BY rowid DESC 
LIMIT {$offset}, {$pl} 

編輯

SELECT *, IF(defaultoruniquevalue LIKE '%_default', 1, 0) AS uses_default 
FROM userform 
ORDER BY uses_default ASC, rowid DESC 
LIMIT {$offset}, {$pl} 
+0

是啊這是絕對的作品,我唯一的問題是使用默認值,問題是存儲的數據是否是默認的或獨特的追加隨機字符串。因此,我們有一組數據如下: randomstring_default randomstring_default randomstring_default randomstring_unique1 randomstring_unique2 randomstring_unique3 randomstring_unique4 – Sean

+0

你能分辨默認和獨特的價值?即你知道預先設定的默認值嗎?如果是這樣,請將'WHERE'子句更改爲:'WHERE defaultoruniquevalue LIKE'%_defaultvalue'' –

+0

這與Like語句一起工作,但第二部分是我仍然需要獲取字段中唯一數據的所有行首先返回並按rowid對desc進行排序。 – Sean

1

您仍然可以在使用子句

SELECT.. 
FROM.. 
WHERE.. 
ORDER BY (CASE defaultoruniquevalue 
       WHEN 'randomstring_standardefaultvalue' THEN 0 
       ELSE 1 END) DESC, 
     rowid DESC 
+0

是否有任何使用'CASE .. WHEN .. THEN 0 ELSE 1 END'的優勢? – mvds

+2

@mvds - 不在MySQL中,但不能將布爾表達式放在其他一些RDBMS的WHERE子句中。所以,這種模式更加便攜。 – MatBailie

+0

有了這個聲明,既然默認值也總是以一個唯一的可以前綴,我用LIKE%_defaultbg替換WHEN語句行THEN 0 – Sean

相關問題