gpt4 book ai didi

mysql - SQL - 非常复杂的查询

转载 作者:太空宇宙 更新时间:2023-11-03 11:09:38 24 4
gpt4 key购买 nike

我写了一个复杂的大查询,遇到了困难:

SELECT e.id, e.name,e.age, e.area, e.date,e.private, e.place, p.*, COUNT(user) AS attending
FROM events AS e
LEFT OUTER JOIN
(SELECT user, event
FROM attendance
) AS a
ON a.event = e.id
LEFT OUTER JOIN
(SELECT name AS place_name, id as idd, nz AS place_loc, coor
FROM places
) AS p
ON p.idd = e.place
where (e.age LIKE "%{17-18}" OR e.age LIKE "%{18-19}" OR e.area LIKE "%{1}" OR e.area LIKE "%{2}" OR e.area LIKE "%{4}" OR e.area LIKE "%{6}" OR e.area LIKE "%{32}" OR e.area LIKE "%{37}" OR e.private LIKE '%id%' )
GROUP BY e.id, e.name
ORDER BY attending DESC

limit 0,7

此查询为我提供了事件,它按出勤表对事件进行了排序,还为我提供了有关事件地点的信息。

无论如何,问题出在WHERE地区......每个用户都有不同的年龄和地区。例子:年龄:{17-18},{20-22} 地区:{0},{1},{2}

每个事件都有相同的东西 - 年龄和地区......我正在尝试找到匹配项:

如果设置了事件:ages- {15-16},{17-18} 并且用户至少设置了其中之一,它将匹配。

我不介意改变我存储年龄和地区的方式..我确信我使用 { } 做得不好,我想要的只是一种设置用户偏好的方法,他可以在其中保存区号和年龄范围,然后我只想从事件中选择与用户年龄和地区匹配的事件。

非常感谢!非常感谢

最佳答案

首先,删除子查询。您可以单独使用连接来编写查询:

SELECT 
e.id, e.name,e.age, e.area, e.date,e.private, e.place,
p.name AS place_name, p.id as idd, p.nz AS place_loc, p.coor
COUNT(user) AS attending
FROM
events AS e
LEFT OUTER JOIN
attendance a
ON
a.event = e.id
LEFT OUTER JOIN
places p
ON
p.idd = e.place
WHERE
e.age LIKE "%{17-18}" OR e.age LIKE "%{18-19}" OR e.area LIKE "%{1}" OR e.area LIKE "%{2}" OR e.area LIKE "%{4}" OR e.area LIKE "%{6}" OR e.area LIKE "%{32}" OR e.area LIKE "%{37}" OR e.private LIKE '%id%' )
GROUP BY e.id, e.name
ORDER BY attending DESC
LIMIT 0,7

现在,开始逻辑。你为什么要这样存储事件年龄?每项事件能否只有一个最低年龄和一个最高年龄,还是您需要一个范围?

对于一个最小和最大年龄,您的 where 子句变成了 e.min 和 e.max 之间的一个简单的 user.age。

对于多个范围也是如此,您将有一个表“范围”,将事件 ID 链接到最小年龄、最大年龄,并且您将把事件加入到它的年龄。

关于mysql - SQL - 非常复杂的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9468072/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com