2013-11-10 6 views
2

У меня есть таблица создать в настоящее время, как, например:Объединение двух MySQL запросов из одной таблицы

issue|total | series 
-----|--------|--------- 
1 | 1  | Series A 
2 | 2  | Series A 
1 | 3  | Series B 
3 | 4  | Series A 
2 | 5  | Series B 
1 | 6  | Series C 

Он отслеживает серии (серии), вместе с номером выпуска (эмиссии) в каждой серии. Кроме того, у меня есть общее количество (общее количество) всего количества записей в этой таблице.

Что я хотел бы сделать, это объединить два запроса, первый из которых используется для определения последнего номера проблемы в данной серии, а второй - для нахождения последнего общего числа в таблице. Предположительно эти два запроса мне нужно использовать следующим образом, я просто не вижу, как бы лучше, чтобы объединить их в один запрос выбора:

Чтобы найти последний выпуск данной серии:

SELECT issue FROM seriesTable WHERE series = 'Series A|Series B|Series C' ORDER BY issue DESC LIMIT 1 

для того, чтобы найти общее количество записей:

SELECT total FROM seriesTable ORDER BY total DESC LIMIT 1 

Так что, если я хотел бы сослаться на последний выпуск серии а и общее количество записей (3, 6), что бы быть лучшим способом сделать это? Я пробовал INNER JOIN и UNION, ни один из которых не работает, однако я думаю, что я на правильном пути, просто используя синтаксис неправильно.

Я предполагаю, что другая альтернатива заключается в том, чтобы запускать запросы отдельно, добавлять к массиву и иметь PHP, дающий мне результат, однако я бы предпочел избежать этого, если это возможно.

+0

как бы вы хотели ваш выход смотреть? –

ответ

2

Оригинальный ответ ниже, после уточнения у меня есть еще один ответ

Вам нужно только пересечь присоединиться один результатом набора строк с суммой вы находитесь Fater.

для серии: А

SELECT series, MAX(issue), total.total FROM seriesTable 
    JOIN (SELECT total FROM seriesTable ORDER BY total DESC LIMIT 1) total 
WHERE series = 'Series A'; 

или для каждой серии

SELECT series, MAX(issue), total.total FROM seriesTable 
    JOIN (SELECT total FROM seriesTable ORDER BY total DESC LIMIT 1) total 
GROUP BY series; 

sql fiddle

Оригинальный ответ

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

select issue as current_issue, total, series from seriesTable 
natural join (SELECT series, 
        max(issue) as issue 
       FROM seriesTable 
       group by series) max_issues; 

sql fiddle

+0

Когда я запускаю этот запрос, я, кажется, получаю номер в столбце «total», который связан с этим номером проблемы. Если вы ищете Series A, я бы хотел получить '(3,6)', то есть окончательную версию Series A и общее количество записей. Если вы ищете Series B, я бы хотел «(2,6)», т. Е.последний выпуск серии B плюс общее количество записей. – Ryan

+0

Я сейчас редактировал, что понимаю, что вы ищете :) –

+0

Это прекрасно работает. Я признаюсь, я не понимаю логики, но, похоже, он делает именно то, что мне нужно. – Ryan

1

Вам просто нужно максимальный выпуск для конкретной серии, а также необходимо максимальное общее для таблицы.

Я думаю, что это то, что ищете:

SELECT max(issue), 
(SELECT max(total) 
    FROM seriesTable) 
    FROM seriesTable 
    WHERE series = 'Series A' 
+0

Это очень красно, однако, когда я запускаю этот запрос, я получаю тот же результат для 'MAX (issue)' и 'COUNT (issue)' - ie в примере выше, для Series AI get '(3,3)' , То, что я пытаюсь сделать, это получить '(3,6)', т. Е. Последний номер серии А и общее количество записей во всей таблице. – Ryan

+0

попробуйте это: выберите max (issue), (выберите max (total) from seriesTable) из серииTable, где series = 'Series A' – DragonZero

+0

Поставил отличную идею из вашего запроса. Благодаря тонну. +1. –

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