我有一个查询,我想根据另一个数据库对结果进行排序。
这是我的查询:
SELECT a.`name`
FROM `article` AS a
LEFT JOIN `container` AS b
ON b.`id` = a.`container`
WHERE a.`container` = '1'
ORDER BY b.`sort` ASC;
这工作正常,但它总是按升序对结果进行排序。但是我希望根据容器表中的值进行排序。
Article table
id | container | name | gender
---|---------------------|---------
1 | 1 | Michael | male
2 | 1 | Joe | male
3 | 2 | Karen | female
4 | 2 | Andrew | male
5 | 3 | Jessica | female
Container table
id | sort | order
---|--------|----
1 | name | asc
2 | name | desc
3 | gender | asc
4 | name | asc
5 | gender | desc
如何更改查询以从容器表中获取订单?
我期待这个结果:
id | container | name | gender
---|---------------------|---------
2 | 1 | Joe | male
1 | 1 | Michael | male
不能在一个查询中执行此操作。
必须在准备查询时(即执行开始之前(修复给定的 SQL 查询。您无法根据执行时发现的数据来更改行为。
您必须在一个查询中读取排序方向,然后使用发现的值设置动态 SQL 查询的格式。
SELECT `sort`, `order` FROM container WHERE id = 1
将这些数据提取到应用程序变量中,如$sort_column
、$direction
。然后使用它们:
$sql = "
SELECT a.`name`
FROM `article` AS a
WHERE a.`container` = '1'
ORDER BY {$sort_column} {$direction}";
...prepare $sql as a query...
...execute query...
(我假设变量的PHP语法,但你可以在任何语言中做类似的事情。
这样的东西有用吗?
ORDER BY CASE WHEN b.`order` = 'ASC' b.`sort` ELSE -b.`sort` END;
如果没有,请提供一些示例数据和该数据的预期结果,以便我们更好地了解您的要求。