2013-05-14 3 views
0

Как я могу объединить 2 оператора mysql в один оператор.Как создать подзапрос

Это мои заявления

MYSQL 1

SELECT et.imei as IMEI, MAX(FROM_UNIXTIME(et.timestamp)) as TID 
FROM exp_terminal_log as et 
group by et.imei 
order by TID desc; 

MYSQL 1 ВЫХОД

IMEI    LATEST DATE 
351895053434419 2013-04-28 11:12:28 
354851057203265 2013-04-28 11:10:44 
354851057234989 2013-04-28 11:10:32 

MYSQL 2

SELECT ct.title AS TITLE, t.phoneid as IMEI 
FROM transactions AS t 
inner JOIN exp_channel_titles AS ct ON (ct.entry_id = t.restaurant_id) 
WHERE t.cardid != '88888888' AND t.cardid > 0 
AND ct.status= 'open' 
GROUP by ct.entry_id 

MYSQL 2 ВЫХОД

TITLE  IMEI 
Café Katz 351895053434419 
Restaurant1 354851057203265 
Restaurant2 354851057234989 

Желаемая выход

TITLE  IMEI    LATEST DATE 
Café Katz 351895053434419 2013-04-28 11:12:28 
Restaurant1 354851057203265 2013-04-28 11:10:44 
Restaurant2 354851057234989 2013-04-28 11:10:32 

это как пытался, но это не работает, из-за моего подзапрос возвращает более одной строки.

SELECT et.imei as IMEI, MAX(FROM_UNIXTIME(et.timestamp)) as TID 
FROM exp_terminal_log as et 
group by et.imei 
having et.imei = (

SELECT t.phoneid as IMEI 
FROM transactions AS t 
inner JOIN exp_channel_titles AS ct ON (ct.entry_id = t.restaurant_id) 
WHERE t.cardid != '88888888' AND t.cardid > 0 
AND ct.status= 'open' 
GROUP by ct.entry_id) 

ответ

0

Попробуйте это:

SELECT 
    ct.title AS TITLE, 
    t.phoneid as IMEI, 
    t2.TID 
FROM transactions AS t 
inner JOIN exp_channel_titles AS ct ON ct.entry_id = t.restaurant_id 
INNER JOIN 
(
    SELECT et.imei as IMEI, MAX(FROM_UNIXTIME(et.timestamp)) as TID 
    FROM exp_terminal_log as et 
    group by et.imei 
) AS t2 ON t.phoneid = t2.IMEI 
WHERE t.cardid != '88888888' 
    AND t.cardid > 0 
    AND ct.status= 'open' 
GROUP by ct.entry_id; 
+0

Arrh благодарю вас @Mahmoud Гамаля :) Я буду принимать вас ответить в течение 7 минут:) – Zaz

+0

@ Zaz - Добро пожаловать в любое время :) –

0

Вы можете сделать объединение двух подзапросов:

SELECT titles.TITLE, titles.IMEI, dates.TID FROM 
    (SELECT et.imei as IMEI, MAX(FROM_UNIXTIME(et.timestamp)) as TID 
     FROM exp_terminal_log as et 
     group by et.imei 
     order by TID desc) dates 
    INNER JOIN 
    (SELECT ct.title AS TITLE, t.phoneid as IMEI 
     FROM transactions AS t 
     inner JOIN exp_channel_titles AS ct ON (ct.entry_id = t.restaurant_id) 
     WHERE t.cardid != '88888888' AND t.cardid > 0 
     AND ct.status= 'open' 
     GROUP by ct.entry_id) titles 
    ON titles.IMEI=dates.IMEI 
Смежные вопросы