我在下面有一个mysql表
ID Name
1 AAA
2 BBB
3 CCC
现在我有一个包含列Name的随机值的变量。
$name = "BBB"; //Now this value can be changed that means it can be CCC or AAA
我希望输出为
ID Name
2 BBB
1 AAA
3 CCC
如果值为CCC,则输出应如下所示。包含该值的行应位于顶部,然后是其余行。
ID Name
3 CCC
1 AAA
2 BBB
和往常一样,我坚持使用select查询。普通的选择查询不起作用,因为它只选择一个项目。
$sql = "select * from table where name='".$name."'";
答案 0 :(得分:1)
也许你可以尝试这样的事情:
SELECT * FROM table WHERE name='".$name."'
UNION (SELECT * FROM table WHERE name!='".$name."')
答案 1 :(得分:1)
您可以将ORDER BY
与CASE
合并。
类似的东西:
SELECT * FROM your_table
ORDER BY
CASE WHEN name=? THEN 0
ELSE 1
END
请注意,我已经用准备好的语句(问号,PDO或mysqli)直接替换了php变量。
在mysql中它会是这样的:
CASE WHEN name="' . mysql_real_escape_string($name) . '" THEN 0
答案 2 :(得分:1)
使用ORDER BY子句中的FIELD()函数可以实现此目的。它的工作原理是指定要排序的列,然后指定要按顺序排序的值。例如:
SELECT * FROM tablename ORDER BY FIELD(Name, 'CCC') DESC;