2012-02-29 96 views
1

我有这个查询,但显然它可以循环和崩溃的服务器。MySql选择2个表像

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 

表Contactos:

Id |Email |Nombre |Sensor 
1 [email protected] nombre1  1,3,5 
2 [email protected] nombre2  2,4  

该表具有这种结构,以避免重复值

我感谢你的帮助。

+0

请发表您的预计结果 – 2012-02-29 23:04:41

回答

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指出,如果你发布了它肯定会帮助你期望结果的例子。

除此之外,您应该将传感器字段中的多个值移至多对多表(contactos_id,sensor_id)。优化器无法用逗号分隔列表进行任何操作,因此任何对该字段的过滤或连接都将非常低效。

+0

谢谢,我会尽力并在稍后告诉您结果 – Javier 2012-03-01 12:16:24

+0

请按照Mosty的要求更新您的问题并提供您的预期产品的详细信息。它会帮助我们帮助你。 – nnichols 2012-03-01 12:27:30

+0

完美!谢谢 – Javier 2012-03-01 19:47:23