2010-03-13 139 views
1

我在做什麼不對的:MySQL的UNION查詢不能

$sql = "SELECT * FROM content 
WHERE threadName LIKE '%$filter%' 
ORDER BY lastUpdated desc 
UNION SELECT * 
FROM content 
WHERE threadName NOT LIKE '%$filter%' 
ORDER BY lastUpdated desc"; 

前盟的第一個語句適用於自己的,但是這一次以上的回報:

mysql_fetch_array()警告 - 提供的參數不是一個有效的MySQL結果資源

我相信UNION不會返回重複的條目,在這種情況下,第二個SELECT stat ement不需要有NOT LIKE,但會返回第一個語句中未列出的所有內容。

+0

第二個查詢是否也可以自行工作? – AxelEckenberger 2010-03-13 14:32:07

+0

是第二個人自己工作 – kalpaitch 2010-03-13 14:35:15

回答

2

編輯:該查詢應該讓你通過filter第一個匹配的行,其次是不匹配:

SELECT * 
FROM content 
ORDER BY 
    CASE WHEN threadName LIKE '%$filter%' THEN 0 ELSE 1 END, 
    lastUpdated DESC 

注意,你永遠不應該SELECT *,列出必要的列,而不是。

+0

這聽起來像他希望所有匹配先出現,由lastUpdate排序,然後是所有非匹配。 因此,ORDER BY必須位於CASE語句(threadname LIKE'%$ filter%'),然後是lastUpdated。 – LesterDove 2010-03-13 14:34:38

+0

我認爲你可能有一個ORDER BY點。我真正想要做的是將所有那些實際搜索到的結果($ filter)放在最上面,其餘的放在它們下面,這樣最後的ORDER BY可能會改變這一點嗎? – kalpaitch 2010-03-13 14:36:35

+0

是的,有人指出,不要使用SELECT *之前,謝謝,我會最終改變 – kalpaitch 2010-03-13 14:37:46

0

在使用UNION時,我們必須使用列名而不是'*'。
在這裏,我將創建.csv文件在具有emailid驗證表達式的系統上的特定位置,通過使用mysql查詢如下。
select 'col1','col2','col3','col4' from tableName UNION SELECT col1,col2,col3,col4 FROM tableName WHERE col4 NOT REGEXP '^[a-zA-Z0-9][a-zA-Z0-9.-]*[a-zA-Z0-9.-]@[a-zA-Z0-9][a-zA-Z0-9._-]*[a-zA-Z0-9]\.[a-zA-Z]{2,4}$' INTO OUTFILE '/home/sachin/mysqloutput/data.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '''' LINES TERMINATED BY '\n';