Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql使用“CONCAT”时“Order by”不起作用_Mysql_Concatenation_Sql Order By - Fatal编程技术网

Mysql使用“CONCAT”时“Order by”不起作用

Mysql使用“CONCAT”时“Order by”不起作用,mysql,concatenation,sql-order-by,Mysql,Concatenation,Sql Order By,我一直在寻找原因。 在这个查询中,我试图显示结果,但之前我对一个表的URL字段和另一个表的URL字段进行了比较,我使用CONCAT,因为URL不完全相同,但当我尝试添加Order by时。。。该语句需要很长时间才能响应,直到服务器切断我的连接 SELECT id, url, title MATCH(title, tags, category) AGAINST('white dogs') as score FROM Items LEFT JOIN Deleted_Items ON Deleted

我一直在寻找原因。 在这个查询中,我试图显示结果,但之前我对一个表的URL字段和另一个表的URL字段进行了比较,我使用CONCAT,因为URL不完全相同,但当我尝试添加Order by时。。。该语句需要很长时间才能响应,直到服务器切断我的连接

SELECT id, url, title MATCH(title, tags, category) AGAINST('white dogs') as score 
FROM Items
LEFT JOIN Deleted_Items
ON Deleted_Items.url LIKE CONCAT(Items.url , '%') 
WHERE Deleted_Items.url IS NULL 
AND MATCH(title, tags, category) AGAINST('white dogs' IN BOOLEAN MODE)
ORDER BY score DESC
LIMIT 30

使用CONCAT的连接条件是不可搜索的,因此在计算上本质上是低效的。也许可以通过将数据持久化到一个临时表来帮助它

INSERT INTO some_temp_tbl_name (id, url, title, tags, category) 
SELECT i.id, i.url, i.title, i.tags, i.category
FROM Items i
LEFT JOIN Deleted_Items d ON d.url LIKE CONCAT(i.url , '%') 
WHERE d.url IS NULL 

然后从该表执行匹配和排序。

您需要在select上引用该表,否则它将被解释为重复,并将一直搜索到超时。我通过将表名添加到每列进行了测试,但结果是相同的项*