0

我有这个 mysql 查询。

任何想法如何对结果进行排序以便首先从查询的第一部分获取结果,然后是从查询的第二部分获取的结果。

这是我的做法,但它无法正常工作,将结果混合在一起。

SELECT name, pic0, bio,site
FROM ".$table."
WHERE ( (name LIKE '%john%' OR name LIKE '%smith%') AND site LIKE ('%site1%') )
   OR ( name IS NOT NULL AND category IN ('drivers', 'construction') AND site LIKE ('%site1%') )
ORDER BY ( (name LIKE '%john%' OR name LIKE '%smith%') AND site LIKE ('%site1%') ) DESC
LIMIT ".$offset.", ".$rowsperpage."");

谢谢

4

2 回答 2

0

如果查询的第一部分是指第一个- 条件,则在现有的 - 子句之后WHERE添加 a 就足够了。DESCORDER BY

由于它使用与第一个条件相同的逻辑,因此它将1用于第一个条件为真的那些行,以及0其余的行。

按降序排序应该把第一个条件的结果放在第一位。

于 2012-06-20T15:36:34.200 回答
0

将查询拆分为两个查询和UNION它们

MySQL 中的联合:http: //dev.mysql.com/doc/refman/5.0/en/union.html

你的查询应该是这样的,虽然我没有测试过:

(SELECT name, pic0, bio,site
FROM ".$table."
WHERE ( (name LIKE '%john%' OR name LIKE '%smith%') AND site LIKE ('%site1%') )
ORDER BY ( (name LIKE '%john%' OR name LIKE '%smith%') AND site LIKE ('%site1%') ) DESC)
UNION
(SELECT name, pic0, bio,site
FROM ".$table."
WHERE ( name IS NOT NULL AND category IN ('drivers', 'construction') AND site LIKE ('%site1%') )
ORDER BY ( (name LIKE '%john%' OR name LIKE '%smith%') AND site LIKE ('%site1%') ) DESC)  
于 2012-06-20T15:34:03.630 回答