MySql Select 2 таблицы Нравится - PullRequest
1 голос
/ 01 марта 2012

У меня есть этот запрос, но, по-видимому, он может зациклить и вызвать сбой сервера.

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    

Эта таблица имеет такую ​​структуру, чтобы избежать повторения значений

Я ценю вашу помощь.

1 Ответ

0 голосов
/ 01 марта 2012

Это немного догадка, так как я не уверен на 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

Как указал Мости, определенно было бы полезно, если бы вы опубликовали пример того, что вы ожидаете в результате.

Кроме того, вам следует переместить несколько значений в поле «Сенсор» в таблицу «многие ко многим» (contactos_id, sensor_id). Оптимизатор не может сделать что-нибудь умное с вашим списком, разделенным запятыми, поэтому любая фильтрация или присоединение к этому полю будут очень неэффективными.

...