我有这个查询,但显然它可以循环并崩溃服务器。
SELECT neveras.Panel, contactos.Email FROM neveras, contactos
WHERE neveras.Alarma = 1 And Estado <> 1
And contactos.Sensor
LIKE CONCAT('%,',(Select Usuario FROM neveras where Alarma = 1),',%')
表neveras:
Id|Panel|Usuario|Alarma|Estado
1 uno 1 1 2
2 dos 1 2 1
3 tres 2 2 1
4 cuatro 2 2 1
5 cinco 3 2 1
表联系人:
Id |Email |Nombre |Sensor
1 uno@uno nombre1 1,3,5
2 dos@dos nombre2 2,4
此表具有此结构以避免重复值
感谢您的帮助。
答案 0 :(得分:0)
这是一个猜测,因为我不是100%确定你想要实现的目标,但试试这个 -
SELECT neveras.Panel, contactos.Email
FROM neveras
INNER JOIN contactos
ON FIND_IN_SET(neveras.Usuario, contactos.Sensor)
WHERE neveras.Alarma = 1
AND neveras.Estado <> 1
正如Mosty所指出的那样,如果你在结果中发布了一个你期望的例子,肯定会有所帮助。
除此之外,您应该将Sensor字段中的多个值移动到多对多表(contactos_id,sensor_id)。优化器无法使用逗号分区列表做任何聪明的事情,因此任何过滤或加入该字段的效率都会非常低。