MySQL генерирует счетчик в режиме реального времени, сгруппированный родительским идентификатором -- mysql поле с участием subquery поле с участием counter пол Связанный проблема

MySQL generate real-time counter grouped by parent ID


0
vote

проблема

русский

У меня есть две таблицы:

Родительская информация и AMP; Зависимая информация

Структуры таблицы следующие:

Родитель

 <код> ID   |   First   |   Last   |   DOB       |   Address ------------------------------------------------- 1    |   John    |   Doe    | 1980-01-01  |   123 street 2    |   Ryan    |   Mack   | 1974-12-12  |   444 Place   

Иждиенцы

 <код> ParentID   |    Type   |    First   |   Last    |    DOB -------------------------------------------------- 1    |   Spouse  |    Jane    |    Doe    |   1981-02-01 1    |   Child   |    Mike    |    Doe    |   1999-08-01 1    |   Child   |    Zoe     |    Doe    |   2002-04-01 2    |   Spouse  |    Sarah   |    Mack   |   1964-01-01 2    |   Child   |    Andrew  |    Mack   |   1997-05-01   

Я хочу создать запрос (идеально один вызов с Joins, который возвращает следующее:

Таблица результаты

 <код> First   |    Last    |    Type    |    DOB        |     Address ----------------------------------------------------------------  John    |    Doe     |    Parent  |  1980-01-01   |   123 Street Jane    |    Doe     |    Spouse  |  1981-02-01   |   123 Street Mike    |    Doe     |   Child    |  1999-08-01   |   123 street Zoe     |    Doe     |   Child    |  2002-04-01   |   123 Street Ryan    |    Mack    |  Parent    |  1974-12-12   |   444 Place Sarah   |    Mack    |   Spouse   |  1964-01-01   |   444 Place Andrew  |    Mack    |   Child    |  1997-05-01   |   444 Place   

Я могу создать таблицу выше с помощью с другой, чтобы пользователь со следующим запросом:

 <код> SELECT t.First, t.Last, t.Type, t.DOB, t.Address FROM (SELECT ID, First, Last, 'Parent' as Type, DOB, Address, 1 as SortKey                  FROM Parent             UNION ALL             SELECT p.ID, d.First, d.Last, d.Type, d.DOB, p.Address,                           CASE WHEN d.Type = 'Spouse' THEN 2 ELSE 3 END as SortKey                     FROM Dependents d                             INNER JOIN Parent p                                     ON d.ParentID = p.ID) t ORDER BY t.ID, t.SortKey   

Я пытаюсь решить (потенциально) большую проблему в том, что я должен сосчитать каждую запись для конкретного идентификатора участника на основе нескольких параметров.

Родители всегда будут 1, Супруги всегда будут 2 (если они существуют) Дети начнутся в 3 и продолжаются, пока не будет больше (если они существуют).

Моя конечная таблица будет выглядеть как:

 <код> ng-click0  

Я знаю, что я могу установить пользовательскую переменную в верхней части вызова со сказать:

set @ counter: = 0;

тогда @Counter: = @ счетчик + 1 в качестве счетчика,

Но это просто продолжат подсчет через запрос SQL вместо ID.

Любые идеи?

Английский оригинал

I have two tables:

Parent Information & Dependent Information

The table structures are as follows:

Parent

ID   |   First   |   Last   |   DOB       |   Address ------------------------------------------------- 1    |   John    |   Doe    | 1980-01-01  |   123 street 2    |   Ryan    |   Mack   | 1974-12-12  |   444 Place 

Dependents

ParentID   |    Type   |    First   |   Last    |    DOB -------------------------------------------------- 1    |   Spouse  |    Jane    |    Doe    |   1981-02-01 1    |   Child   |    Mike    |    Doe    |   1999-08-01 1    |   Child   |    Zoe     |    Doe    |   2002-04-01 2    |   Spouse  |    Sarah   |    Mack   |   1964-01-01 2    |   Child   |    Andrew  |    Mack   |   1997-05-01 

I want to build a query (ideally single call with joins which returns the following:

Table Results

First   |    Last    |    Type    |    DOB        |     Address ----------------------------------------------------------------  John    |    Doe     |    Parent  |  1980-01-01   |   123 Street Jane    |    Doe     |    Spouse  |  1981-02-01   |   123 Street Mike    |    Doe     |   Child    |  1999-08-01   |   123 street Zoe     |    Doe     |   Child    |  2002-04-01   |   123 Street Ryan    |    Mack    |  Parent    |  1974-12-12   |   444 Place Sarah   |    Mack    |   Spouse   |  1964-01-01   |   444 Place Andrew  |    Mack    |   Child    |  1997-05-01   |   444 Place 

I am able to build the table above with help from another SO user with the following query:

SELECT t.First, t.Last, t.Type, t.DOB, t.Address FROM (SELECT ID, First, Last, 'Parent' as Type, DOB, Address, 1 as SortKey                  FROM Parent             UNION ALL             SELECT p.ID, d.First, d.Last, d.Type, d.DOB, p.Address,                           CASE WHEN d.Type = 'Spouse' THEN 2 ELSE 3 END as SortKey                     FROM Dependents d                             INNER JOIN Parent p                                     ON d.ParentID = p.ID) t ORDER BY t.ID, t.SortKey 

I am trying to solve a (potentially) bigger issue in that I have to count each record for the particular member ID based on a few parameters.

Parents will always be 1, Spouses will always be 2 (if they exist) Children will start at 3 and continue until there are no more (if they exist).

My end table would look like:

First   |    Last    |    Type    |    DOB        |     Address  |   Count --------------------------------------------------------------------------- John    |    Doe     |    Parent  |  1980-01-01   |   123 Street |  1 Jane    |    Doe     |    Spouse  |  1981-02-01   |   123 Street |  2 Mike    |    Doe     |   Child    |  1999-08-01   |   123 street |  3 Zoe     |    Doe     |   Child    |  2002-04-01   |   123 Street |  4 Ryan    |    Mack    |  Parent    |  1974-12-12   |   444 Place  |  1 Sarah   |    Mack    |   Spouse   |  1964-01-01   |   444 Place  |  2 Andrew  |    Mack    |   Child    |  1997-05-01   |   444 Place  |  3 

I know I can set a user variable at the top of the call with say:

SET @counter:= 0;

THEN @counter:=@counter+1 as counter,

but this would just continue the count all the way through the sql query instead of by ID.

Any ideas?

</div
        

Список ответов

1
 
vote
vote
Лучший ответ
 

Вы очень близко.

 <код> SET @counter:= 0; @counter:=@counter+1 as counter;   

почти делает то, что вы хотите, так почему бы не изменить его на:

 <код> SET @counter:= 3; SELECT   inner_select.first   ,inner_select.last   ,inner_select.Type   ,inner_select.DOB   ,inner_select.Address   ,CASE WHEN inner_select.SortKey IN (1,2)      THEN if(@counter:= 3 = 3,inner_select.SortKey,inner_select.SortKey)    ELSE @counter:= @counter + 1 END as SortKey FROM (   SELECT t.First, t.Last, t.Type, t.DOB, t.Address     FROM (SELECT ID, First, Last, 'Parent' as Type, DOB, Address, 1 as SortKey          FROM Parent   UNION ALL   SELECT p.ID, d.First, d.Last, d.Type, d.DOB, p.Address,      CASE WHEN d.Type = 'Spouse' THEN 2 ELSE 3 END as SortKey   FROM Dependents d   INNER JOIN Parent p ON d.ParentID = p.ID) t   ORDER BY t.ID, t.SortKey  ) inner_select ORDER BY inner_select.ID, inner_select.SortKey;   

Сначала мы начинаем с @Counter на 3, чтобы начать подсчитать детей.
Поскольку предыдущий выбор настолько близко, мы выбираем от , и немного настроить результат.
<Код> if (@count:= 3 = 3,i.sk,i.sk) конечно всегда дает <код> inner_select.sortKey (не @ counter) в результате, но заставляет сброс @Counter.

Надеюсь, это поможет.

 

You are very close.

SET @counter:= 0; @counter:=@counter+1 as counter; 

Almost does what you want, so why not change it to:

SET @counter:= 3; SELECT   inner_select.first   ,inner_select.last   ,inner_select.Type   ,inner_select.DOB   ,inner_select.Address   ,CASE WHEN inner_select.SortKey IN (1,2)      THEN if(@counter:= 3 = 3,inner_select.SortKey,inner_select.SortKey)    ELSE @counter:= @counter + 1 END as SortKey FROM (   SELECT t.First, t.Last, t.Type, t.DOB, t.Address     FROM (SELECT ID, First, Last, 'Parent' as Type, DOB, Address, 1 as SortKey          FROM Parent   UNION ALL   SELECT p.ID, d.First, d.Last, d.Type, d.DOB, p.Address,      CASE WHEN d.Type = 'Spouse' THEN 2 ELSE 3 END as SortKey   FROM Dependents d   INNER JOIN Parent p ON d.ParentID = p.ID) t   ORDER BY t.ID, t.SortKey  ) inner_select ORDER BY inner_select.ID, inner_select.SortKey; 

First we start with the @counter on 3, to start counting the kids.
Because the previous select is so close we select from that and tweak the result a little.
The if (@count:= 3 = 3,i.sk,i.sk) of course always gives inner_select.sortKey (not the @counter) as a result, but forces a reset of @counter.

Hope this helps.

</div
 
 
 
 

Связанный проблема

0  Ошибка обновления записи  ( Error updating a record ) 
Я получаю ошибку mysql: #update (ActiveReCord :: authentInvalid) "mysql :: Ошибка: # hy 000got Ошибка 139 из механизма хранения: При попытке обновить те...

0  Группировка итогов нестандартными кварталами в MySQL  ( Grouping totals by non standard quarters in mysql ) 
У меня есть простая таблица, которая включает в себя продавец, покупатель, дату транзакции, а также всего. Я хочу суммировать транзакции для каждого продавц...

13  Должен ли я совершить после одного выбора  ( Should i commit after a single select ) 
Я работаю с MySQL 5.0 от Python с помощью модуля MySQLDB. Рассмотрим простую функцию для загрузки и возврата содержимого всей таблицы базы данных: <код> d...

0  Pandas импорт не вставляет все строки  ( Pandas import not inserting all rows ) 
Я импортирую файл .csv с 3300 рядами данных через следующее: <код> kendo0 После успешного импорта я делаю запрос «Выбрать * из ...» на моем столе, которы...

1  Как я могу выбрать, используя пересечение стоимости разделенного запятой?  ( How can i select using an intersection of comma separated value ) 
У меня есть столбец, удерживает значения, разделенные запятыми. <код> 1,2,3 4,6,7 2,3,8 12234,5467,232445,232455,11223 с заданными критериями массива (н...

1  Доступ к данным из другой базы данных в Joomla 3.2+  ( Accessing data from another database in joomla 3 2 ) 
Я обновляю свои компоненты от Joomla 1.7 до Joomla 3.3 и должен держать оригинальную базу данных. Поэтому мне необходимо получить доступ к данным отображения ...

0  Процедура ничего не делает  ( Procedure doesnt do anything ) 
Я сделал процедуру в MySQL. Похоже, это выглядит. Я назвал эту процедуру из PHP. После этого звонка стол все еще остается пустым, и я не знаю почему. ...

0  Как я могу выбрать следующее бронирование MySQL?  ( How can i select the next reservation mysql ) 
У меня есть таблица, вызывающая бронирование, и она содержит все бронирование для каждого автомобиля. И у меня есть поле резервированияStatus, которое означае...

0  Я не могу получить данные из трех стол для получения ошибки # 1111 Неверное использование групповой функции  ( I am not able to get data from three table geting error 1111 invalid use of gro ) 
У меня есть три таблицы <код> table A ------------------------------------------ filing_no | pet_name | res_name | court_no --------------------------------...

0  Если запись в таблице A не существует в таблице b сделать что-то, как бы я пошел по этому поводу?  ( If record in table a does not exist in table b do something how would i go abou ) 
У меня есть таблица A с полем, называемым писем, мне нужно проверить таблицу B, которая также имеет поле под названием Emails. Если электронное письмо в табли...

0  Набор ToggleButton состояние из входящих данных JSON  ( Set togglebutton status from incoming json data ) 
<Р> Я пытаюсь следовать Android учебник , чтобы изменить базу данных MySQL данные из приложения Android. Я довольно новый для концепции JSON синтаксического р...

0  Должен ли я обрабатывать шланг / плохие слова маскировки на стороне сервера (или на стороне клиента) для достижения лучшей производительности?  ( Should i process slang bad words masking on server side or client side to achi ) 
Я разрабатываю в чате в чате в режиме реального времени и необходимость замаскировать плохие слова, которые клиент отправляет. Итак, теперь мне интересно пров...

0  Пройдите имя таблицы, чтобы выбрать оператор из курсора  ( Pass table name to select statement from cursor ) 
Как я могу использовать значения, возвращаемые из курсора в качестве названий таблиц в MySQL-процедурах? <код> DECLARE cur CURSOR FOR select table_name, col...

-1  Как решить создание проблемы с таблицей в MySQL? [закрыто]  ( How to solve creating table issue in mysql ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> закрыт. Этот вопрос не соответствует Рекомендациям переполнения ...

0  Как я могу получить значение группы записей в группу столбца, используя с функцией в Laravel Eloquent ORM  ( How can i get count of records group by a column using with function in laravel ) 
Мне нужно получить количество записей <код> groupBy с использованием <код> with() функция, известная как adgerage loading. У меня есть две таблицы, имеющие ...

Связанный проблема

0  Ошибка обновления записи 
0  Группировка итогов нестандартными кварталами в MySQL 
13  Должен ли я совершить после одного выбора 
0  Pandas импорт не вставляет все строки 
1  Как я могу выбрать, используя пересечение стоимости разделенного запятой? 
1  Доступ к данным из другой базы данных в Joomla 3.2+ 
0  Процедура ничего не делает 
0  Как я могу выбрать следующее бронирование MySQL? 
0  Я не могу получить данные из трех стол для получения ошибки # 1111 Неверное использование групповой функции 
0  Если запись в таблице A не существует в таблице b сделать что-то, как бы я пошел по этому поводу? 
0  Набор ToggleButton состояние из входящих данных JSON 
0  Должен ли я обрабатывать шланг / плохие слова маскировки на стороне сервера (или на стороне клиента) для достижения лучшей производительности? 
0  Пройдите имя таблицы, чтобы выбрать оператор из курсора 
-1  Как решить создание проблемы с таблицей в MySQL? [закрыто] 
0  Как я могу получить значение группы записей в группу столбца, используя с функцией в Laravel Eloquent ORM