2016-09-08 6 views
0

MySQL запрос:подзапрос не похоже на работу

`SELECT IFNULL(party.`user_id`, 0) as isparticipant, a.`id`, a.`created`,` `a.`lastreplied`,` 

a.`type`, b.`created_by`, b.`message`, c.`isread` 


FROM `jos_social_conversations` AS `a` 

LEFT JOIN `jos_social_conversations_participants` as party on a.id = party.conversation_id 
and party.user_id = '602' 

INNER JOIN `jos_social_conversations_message` AS `b` ON 
`a`.`id` = `b`.`conversation_id` 

INNER JOIN `jos_social_conversations_message_maps` AS `c` 
ON `c`.`message_id` = `b`.`id` and c.`conversation_id` = b.`conversation_id` 



INNER JOIN 
(select cm.`conversation_id`, max(cm.`message_id`) as `message_id` from 
`jos_social_conversations_message_maps` as cm 

inner join `jos_social_conversations_message` as bm 
on cm.`message_id` = bm.`id` 

LEFT JOIN `jos_social_block_users` AS `bus` ON `bm`.`created_by` = `bus`.`user_id` 

AND `bus`.`target_id` = '602' 

WHERE `cm`.`user_id` = '602' AND(SELECT count(isread) AS newMsg 


FROM jos_social_conversations_message_maps as maps WHERE a.id = maps.conversation_id AND 
maps.isread = 0 AND maps.user_id = '602') AND `cm`.`state` = '1' and `bus`.`id` IS NULL 
group by cm.`conversation_id`) as x ON c.`message_id` = x.`message_id` 



LEFT JOIN `jos_social_block_users` 
as bus ON a.`created_by` = bus.`user_id` AND bus.`target_id` = '602' 

WHERE `c`.`user_id` = '602' 



AND bus.`id` IS NULL AND `c`.`state` = '1' 

И это дает ошибку, как:

1054 - Неизвестный столбец 'A.id' в 'где предложение'

подзапрос из вышеприведенного запроса, как указано ниже:

AND(SELECT count(isread) AS newMsg FROM jos_social_conversations_message_maps WHERE conversation_id = 3 AND isread = 0 AND user_id = '602') 

Выход по току: enter image description here

Ожидаемые результаты:

Там должно быть еще один столбец называется 'newMsg' отображение общего подсчета 'isread' столбца, который имеет '0' в качестве значения для каждого идентификатора ..

+0

Можете ли вы приложить некоторые усилия для форматирования запроса? –

+0

@GordonLinoff, для краткости удалена некоторая строка кода. – 112233

+0

Ваш список SELECT содержит восемь столбцов. Что заставляет вас думать, что должен быть другой? Пожалуйста, опубликуйте полный запрос, отформатированный так, чтобы быть читаемым, как предложил @Gordon. – MJH

ответ

1

Вот моя форматированная версия:

SELECT IFNULL(party.`user_id`, 0) as isparticipant, a.`id`, a.`created`, a.`lastreplied`, a.`type`, b.`created_by`, b.`message`, c.`isread` 
FROM `jos_social_conversations` AS `a` 
LEFT JOIN `jos_social_conversations_participants` as party on a.id = party.conversation_id and party.user_id = '602' 
INNER JOIN `jos_social_conversations_message` AS `b` ON `a`.`id` = `b`.`conversation_id` 
INNER JOIN `jos_social_conversations_message_maps` AS `c` ON `c`.`message_id` = `b`.`id` and c.`conversation_id` = b.`conversation_id` 
INNER JOIN (select cm.`conversation_id`, max(cm.`message_id`) as `message_id` 
      from `jos_social_conversations_message_maps` as cm 
      inner join `jos_social_conversations_message` as bm on cm.`message_id` = bm.`id` 
      LEFT JOIN `jos_social_block_users` AS `bus` ON `bm`.`created_by` = `bus`.`user_id` AND `bus`.`target_id` = '602' 
      WHERE `cm`.`user_id` = '602' AND(SELECT count(isread) AS newMsg 
               FROM jos_social_conversations_message_maps 
               WHERE conversation_id = 3 AND isread = 0 AND user_id = '602' 
              ) 
              AND `cm`.`state` = '1' 
              and `bus`.`id` IS NULL 
      group by cm.`conversation_id` 
      ) as x ON c.`message_id` = x.`message_id` 
LEFT JOIN `jos_social_block_users` as bus ON a.`created_by` = bus.`user_id` AND bus.`target_id` = '602' 
WHERE `c`.`user_id` = '602' 
    AND bus.`id` IS NULL AND `c`.`state` = '1' 


Ваш подзапрос является частью ИНЕКЕ, поэтому он не будет возвращать еще один столбец. Возможно, вы ищете что-то вроде этого:

SELECT IFNULL(party.`user_id`, 0) as isparticipant, a.`id`, a.`created`, a.`lastreplied`, a.`type`, b.`created_by`, b.`message`, c.`isread`, 
     (SELECT count(isread) 
     FROM jos_social_conversations_message_maps 
     WHERE conversation_id = 3 AND isread = 0 AND user_id = '602' 
     ) AS newMsg 
FROM `jos_social_conversations` AS `a` 
{remainder removed for brevity} 
+0

благодаря тому, что ответ работает так, как ожидалось. И да, теперь я знаю форматированную версию mysql..thanks снова – 112233

Смежные вопросы