我做错了什么:
$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";
UNION之前的第一个声明自身运作良好,但上面的这个声明返回:
mysql_fetch_array()警告 - 提供的参数不是有效的MySQL结果资源
我是否正确地相信UNION不会返回重复的条目,在这种情况下,第二个SELECT语句不需要具有NOT LIKE,而只返回第一个语句中未列出的所有内容。
答案 0 :(得分:2)
编辑:此查询应首先获取filter
匹配的行,然后是不匹配的行:
SELECT *
FROM content
ORDER BY
CASE WHEN threadName LIKE '%$filter%' THEN 0 ELSE 1 END,
lastUpdated DESC
请注意,您绝不应该SELECT *
,而是列出必要的列。
答案 1 :(得分:0)
使用UNION时,我们必须使用列名而不是'*'
在这里,我将使用mysql查询,如下所示,使用emailid验证表达式在系统上的特定位置创建.csv文件。
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';