2015-06-29 3 views
0

Я пытаюсь получить stop_nameDEF, когда следующий порядок ABC, DEF, GHI из stop_name существует в behaviour таблице, где behaviour_id не увеличивается на единицу, и имя существует несколько раз в таблице также он не всегда существует один раз. Как я могу получить его с запросом mysql?Получить заказ названия в колонке

Простой:

1 Tree 
3 Tree  
5 ABC 
8 ABC 
9 DEF 
11 DEF 
13 DEF 
17 GHI 
21 Moon 

Таблица:

CREATE TABLE IF NOT EXISTS behaviour(
    behaviour_id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    mac VARCHAR(30) NOT NULL, 
    stop_name VARCHAR(30) NOT NULL,  
    stop_distance INT(11) NOT NULL, 
    speed INT(11) NOT NULL, 
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP 
) 

Этот запрос работает, когда приращение идентификатор одной

SELECT 
    b3.behaviour_id 
FROM 
    behaviour b1 
    INNER JOIN behaviour b2 ON b1.behaviour_id = b2.behaviour_id - 1 
    INNER JOIN behaviour b3 ON b2.behaviour_id = b3.behaviour_id - 1 
WHERE 
    CONCAT(b1.stop_name, b2.stop_name, b3.stop_name) = CONCAT('ABC', 'DEF', 'GHI') 
    AND b1.mac = '12:EF:34:DF:89:JH'; 
+0

Можете ли вы разбить «поиск условие "и добавить пример? –

+0

@OfirBaruch: У меня есть простое выше, я хочу просто проверить, есть ли другие символы ABC, DEF, GHI в столбце stop_name. Я добавил запрос, который работает, когда id увеличивается на единицу, но это не то, что я хочу. – TheBook

ответ

1

Что-то вроде

select b1.id i1,b2.id i2,b3.id i3 FROM behav b1 
INNER JOIN behav b2 ON b2.name='DEF' AND b2.id>b1.id 
INNER JOIN behav b3 ON b3.name='GHI' AND b3.id>b2.id 
WHERE b1.name='ABC' 

должны работать и дать следующий результат:

i1 i2 i3 
5 9 17 
8 9 17 
5 11 17 
8 11 17 
5 13 17 
8 13 17 

Конечно, если вы хотите только первое вхождение, сделать

select b1.id i1,b2.id i2,b3.id i3 FROM behav b1 
INNER JOIN behav b2 ON b2.name='DEF' AND b2.id>b1.id 
INNER JOIN behav b3 ON b3.name='GHI' AND b3.id>b2.id 
WHERE b1.name='ABC' ORDER BY i1,i2 LIMIT 1 
Смежные вопросы