|
|
|
|
|
для: Trianon
(20.01.2010 в 00:46)
| | Да я не против, пусть как хотят переименовывают, конечно если это принесёт пользу.
Но тогда надо отредактировать её, убрать лишнее....
Но я думаю, что предложеное название не совсем точно... | |
|
|
|
|
|
|
|
для: Slo_Nik
(20.01.2010 в 00:30)
| | На самом деле, весьма желательно эту тему переименовать в
"Как получить из таблицы строку с максимальным значением поля?"
Вопрос такой поднимается довольно часто, подводных камней у него масса.
А тут где-то как-то даже подход нарисовался... | |
|
|
|
|
|
|
|
для: Slo_Nik
(16.12.2009 в 12:57)
| | Много было в этой теме написано, много дельных советов, спасибо Trianon и Лена.
Для тех, кому интересно решение этой проблемы привожу запрос
"SELECT con.small AS small,
con.titleph AS title,
con.id_contest AS id_us,
con.id_contest_cat AS id_con_us,
con.quote AS mquote,
cont.id_contest_cat AS id_cont,
cont.name AS name
FROM(select contest.id_contest_cat,
max(contest.id_contest) as id_contest
FROM(SELECT contest.id_contest_cat,
MAX(contest.quote) AS mquote
FROM contest
GROUP BY contest.id_contest_cat) AS cq
LEFT JOIN contest ON (cq.mquote = contest.quote) and (cq.id_contest_cat=contest.id_contest_cat)
GROUP BY contest.id_contest_cat) as q
LEFT JOIN contest AS con ON (q.id_contest = con.id_contest)
LEFT JOIN contest_cat AS cont ON (cont.id_contest_cat = con.id_contest_cat)
ORDER BY con.quote DESC LIMIT 3"
|
Проверено, работает. | |
|
|
|
|
|
|
|
для: Slo_Nik
(23.12.2009 в 11:13)
| | - | |
|
|
|
|
|
|
|
для: Лена
(23.12.2009 в 11:00)
| | мне без разницы как будет выводится, главное, что бы выводились группы, все три, 15,16,17, а какой последовательности не важно.
ещё главное условие, что бы для каждой группы, выводилось одна фотография с макс. quote,а если quote = 0, то порядок вывода групп не нарушался.
вот до этого я пока додуматься не могу. | |
|
|
|
|
|
|
|
для: Slo_Nik
(23.12.2009 в 09:55)
| | Смотрите. Простой запрос,без максимума у меня выводит так:
17- Третий
15 - Первый
16 - Второй
Сложный запрос выводит категории так:
15 - Первый
17-Третий
16 - Второй.
А Вам как надо? | |
|
|
|
|
|
|
|
для: Лена
(23.12.2009 в 00:09)
| | смотрите, что получается.
проблема в том, что если quote равно "0", группы фотографий выводятся не по порядку, 1 , 2 , 3, а, например, 2 , 2 , 1. всего надо три группы вывести, да их и будет всего три.
если сделать простой запрос, как писал выше Trianon, то при подсчёте max quote,даже если quote = "0", группы выводятся как положено, 1 , 2 , 3.
вот эта часть запроса, через id_contest_cat связвываются две таблицы.
(SELECT `contest`.`id_contest_cat`,
MAX(`contest`.`quote`) AS `mquote`
FROM `contest`
GROUP BY `contest`.`id_contest_cat`) AS `q`
|
этот запрос нужен для того, что бы для каждой группы вывести одну фотографию с макс. quote.
делаю простой запрос для получения списка групп фотографий
SELECT
`contest_cat`.`id_contest_cat` AS `id_cont`,
`contest_cat`.`name` AS `name`
FROM `contest_cat`
|
получаю вывод всех трёх групп как и положено, 1 , 2 , 3, всё совпадает, имена групп соответствуют id групп.
теперь когда объеденяю эти два запроса(пример запроса выше), получается, что весь вывод ломается, группы выводятся не по порядку, а, например, 2 , 2 , 1
вот вопрос в том, как сохранить порядок вывода групп? | |
|
|
|
|
|
|
|
для: Slo_Nik
(22.12.2009 в 23:09)
| | У вас по ссылке, которую привели выше, три группы, в каждой группе - фото с максимальным quote.
Я вам пыталась постом выше сказать: допустим, в каждой группе все фото с quote = "0". Еще понятнее. Группа 1. Самая левая. В ней, допустим, у вас три фото. У каждого фото quote = "0". И вы хотите из этих quote выбрать максимум. Это невозможно.
Вот есть у вас три вещи. Каждая из них стоит, допустим, 100 грн. Вы можете выбрать из этих трех вещей ту, которая больше всего стоит? У вас три цифры: 100, 100, 100 - можно из них максимум выбрать? Точно так же и с нолями.
У вас проблема не в LEFT JOIN `contest`, а в основной таблице, к которой соединяются столбцы из других таблиц.
Основная таблица SELECT `contest`.`id_contest_cat`, MAX(`contest`.`quote`)... не сможет из нолей выбрать максимум. А значит SQL вам подсунет какую-то ерунду. Мне так, по крайней мере кажется.
Поэтому вы должны решить: если у вас все quote = "0", вам или внутри этого запроса влепить условие исполнять его только, если quote != "0", или как-то по-другому... Подумаю, завтра на свежую голову скажу, уже спать хочется. | |
|
|
|
|
|
|
|
для: Лена
(22.12.2009 в 23:00)
| | сам запрос
SELECT `con`.`small` AS `small`,
`con`.`titleph` AS `title`,
`con`.`id_contest` AS `id_us`,
`con`.`id_contest_cat` AS `id_con_us`,
`con`.`quote` AS `quote`,
`cont`.`id_contest_cat` AS `id_cont`,
`cont`.`name` AS `name`
FROM (SELECT `contest`.`id_contest_cat`,
MAX(`contest`.`quote`) AS `mquote`
FROM `contest`
GROUP BY `contest`.`id_contest_cat`) AS `q`
LEFT JOIN `contest` AS `con` ON (`q`.`mquote` = `con`.`quote`)
LEFT JOIN `contest_cat` AS `cont` ON (`cont`.`id_contest_cat` = `con`.`id_contest_cat`)
ORDER BY `con`.`quote` DESC
LIMIT 3
|
этот запрос нормально работает, когда у всех фото или практически у всех есть голоса, т.е. quote не равно "0". тогда на главной странице выводится название для каждой группы и одно фото с максимальным quote для определённой группы.
если quote равно "0" у всех фото, тогда выводятся всего 2-е группы, для одной группы две позиции на странице, для другой одна.
получается, что если quote = "0", то надо будет сортировать по id сами фото,
если взять из запроса ту часть, где определяется максимальное quote, то даже с нулевым значением выводятся все группы. | |
|
|
|
|
|
|
|
для: Slo_Nik
(22.12.2009 в 20:14)
| | Вы выводите для каждой группы одну фотографию с максимальным количеством голосов.
Допустим, у каждого из фото количество голосов "0". Как можно из кучи нолей выбрать максимум?
Вам в запросе нужно тогда поставить условие: если quote = 0, то или вообще не выбираем ничего, или выбираем фото с наибольшим(наименьшим) id. Вы что хотите вывести?
Приведите, пожалуйста, сам запрос, который у вас получился. | |
|
|
| |
|