我收到了一个查询,我希望根据另一个数据库对结果进行排序。
这是我的疑问:
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;
这很好用,但它总是对结果进行排序。 Bute我想根据容器表中的值对ist进行排序。
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
答案 0 :(得分:1)
您不能在一个查询中执行此操作。
在准备查询时,必须在执行开始之前修复给定的SQL查询。根据执行时发现的数据,您无法更改行为。
您必须在一个查询中读取排序方向,然后使用您发现的值格式化动态SQL查询。
import cv2
import numpy as np
img = cv2.imread("digitbox.jpg", 0)
_, thresh = cv2.threshold(img, 200, 255, cv2.THRESH_BINARY)
_, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
mask = np.ones_like(img) * 255
boxes = []
for contour in contours:
if cv2.contourArea(contour) > 100:
hull = cv2.convexHull(contour)
cv2.drawContours(mask, [hull], -1, 0, -1)
x,y,w,h = cv2.boundingRect(contour)
boxes.append((x,y,w,h))
boxes = sorted(boxes, key=lambda box: box[0])
mask = cv2.dilate(mask, np.ones((5,5),np.uint8))
img[mask != 0] = 255
result = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR)
for n,box in enumerate(boxes):
x,y,w,h = box
cv2.rectangle(result,(x,y),(x+w,y+h),(255,0,0),2)
cv2.putText(result, str(n),(x+5,y+17), cv2.FONT_HERSHEY_SIMPLEX, 0.6,(255,0,0),2,cv2.LINE_AA)
cv2.imwrite('digitbox_result.png', result)
将这些数据提取到SELECT `sort`, `order` FROM container WHERE id = 1
,$sort_column
等应用变量中。然后使用它们:
$direction
(我假设变量的PHP语法,但你可以用任何语言做类似的事情。)
答案 1 :(得分:0)
这样的事情有用吗?
ORDER BY CASE WHEN b.`order` = 'ASC' b.`sort` ELSE -b.`sort` END;
如果没有,请提供一些样本数据和该数据的预期结果,以便我们更好地了解您的要求。