2014-01-10 6 views
0

У меня возникла следующая проблема.Подсчитать запрос с результатами запроса

У меня есть этот SQL-запрос:

select id, tableid 
    from sysclass 
    where id in (
     select contentid 
      from sysclassgroupcontent 
      where groupid = 5 AND contenttype != 1 
     ); 

Результат является, например:

ID TableID 
1 200 
2 300 
3 200 

Теперь я хочу, чтобы вставить в этом запросе, сколько элементов в этих конкретных таблиц, где идентификатор равняется идентификатор и TABLEID

в коде:

select Count(*) from xxx where classid = yyy; 

XXX является табличкой, например. 200 и yyy, например, ID. 1 или 2.

результат должен выглядеть следующим образом:

ID TableID Count 
    1 200 1020 
    2 300 50021 
    3 200 13 

Вот структура таблицы:

Таблица SysClasss:

  • Id (ПК)
  • TABLEID (ФК - со ссылкой на SysTable.Id)

Таблица SysClassContents:

  • Id (PK)
  • GroupID (ФК Ссылаясь на SysClassGroup.Id)
  • ContentID (FK - regering к SysClass.Id)

Таблица SysClassGroup:

  • Id (ПК)

Таблица SysTable:

  • Id (ПК)
  • Имя (эти имена различных таблиц я хочу рассчитывать в), например, tabelID = 200 == LvElements

Теперь я хочу, чтобы рассчитывать в таблице LVElements все товары с ClassID = 1, если его в Sysclassgroup = 5 Возможно ли это в одном запросе, и как?

Заранее спасибо.

+1

пожалуйста, разместите свои схемы таблиц – Melon

+0

@Melon: Таблица SysClass имеет Поля: Id (PK), TableId (FK - ссылка на SysTable.Id) Таблица SysClassContent имеет поля: Id (PK), GroupId (FK, ссылающиеся на SysClassGroup.Id), ContentID (FK - регистрация на SysClass.Id) Таблица SysClassGroup имеет поля: Id (PK) Таблица SysTable имеет поля: Id (PK), имя (это имена разных таблиц, которые я хочу подсчитать) например tabelID = 200 == LvElements. Нет, я хочу подсчитать в таблице LVElements все элементы. –

+0

ах .. и в каждой таблице есть поле с классами, которые состоят из этой таблицы. например Таблица «LvElements» состоит из Classrd 1 и 3 –

ответ

0

я думаю, что вам нужно

GROUP BY ID 

это даст результат, что вы хотите

+0

, как бы решение выглядело в коде? –

0

Хм, я думаю, что единственный способ сделать это с помощью процедуры MySQL, так как это не представляется возможным использовать «динамические» имена таблиц непосредственно в инструкции.

Trie что-то вроде этого:

Edit - добавил разделителями строк:

delimiter //  
CREATE PROCEDURE getTableCount(IN argTableName CHAR(64), IN argClassid CHAR(64)) 
    BEGIN 
     SET @s = CONCAT('SELECT count(*) FROM XP_net.',argTableName,' WHERE classid = ', argClassid); 
     PREPARE stmt FROM @s; 
     EXECUTE stmt; 
     DEALLOCATE PREPARE stmt; 
    END 
// 
delimiter ; 

затем вызвать его в своем заявлении с этим:

EDIT - Добавлено JOIN:

select sysclass.id, sysclass.tableid, getTableCount(SysTable.Name, 'xxx') as count 
    from sysclass, SysTable: 
    where id in (
     select contentid 
      from sysclassgroupcontent 
      where groupid = 5 AND contenttype != 1 
     ) 
    and SysTable.ID = sysclass.tableid; 
+0

спасибо. так что вы думаете, что только это сделать вручную? –

+0

Нет, не вручную, потому что после создания процедуры вы всегда можете ее использовать. Вам просто нужно создать его один раз. После этого вы можете просто использовать инструкцию select, как показано. – klahcs

+0

Работает ли он для вас? Я не пробовал. – klahcs

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