mysql UNION查询不起作用

时间:2010-03-13 14:26:05

标签: mysql

我做错了什么:

$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,而只返回第一个语句中未列出的所有内容。

2 个答案:

答案 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';