подскажите как переделать sql-запрос

Bitterman

Новичок
number1215
вроде как тема называется "подскажите как переделать sql-запрос", а не "дайте ссылку на ман". И что? Там написано как это сделать одним запросом? Можно пример? Стоит ли отвечать, если все что вы можете ответить - "почитай ман, ламер". Мне не стыдно этого не знать - я не профессиональный программист - это не моя тема и я не часто мне приходилось использовать запросы сложнее стандартных. И задал я конкретный вопрос. На который хотел бы получить конкретный ответ.
Чувак, если из 9 ссылок на странице ты не можешь найти ту, в которой описана твоя задача (причем с примерами запросов), то остается тебе только посочувствовать.
 

number1215

Новичок
вот, все меня очень уверенно тыкали носом в МАX() ... ну, дык, приведите запрос для моего случая с этим максом - это же 2 + 2 ;)
 

Gas

может по одной?
Bitterman
с помощью тех примеров, кажется нельзя решить эту задачу, по крайне мере чтоб не поменялся принцип запроса.

number1215
пример с max() - вложенным запросом достаётся маx(rating), date_format(...) и джойнится полученный resultset c таблицей для получения полных строк.
 

Bitterman

Новичок
Gas
Хм, а разве пункт 3.5.4 не о проблеме тредстартера? насчет принципа запроса не совсем понял.
Вообще, ИМХО, многие из отписавшихся (я по крайней мере)недопоняли, что нужно получить в результате запроса (я большую часть времени полагал, что речь идет исключительно о максимальных результатах, а не о полных строках), а тредстартер вместо того, чтобы спокойно и внятно объяснить, что ему нужно, сразу начал ругаться по поводу понтов и странности форума.
Кстати насчет вычисления нужного результата одним запросом и без подзапросов. Помнится где-то на форуме уже мелькали подобные варианты (искать лень), что-то вроде
[sql]
SELECT t1.*, COUNT(t2.id) as num_rows
FROM table as t1
LEFT JOIN table as t2 ON t2.number > t1.number
GROUP BY t1.id
HAVING num_rows = 0
[/sql]
Запрос, ессно, не проверял и писал навскидку.
 

Gas

может по одной?
да, я туплю, 3.5.4 конечно оно, хоть и периодически натыкаюсь на этот запрос, думал почему-то что для этой задачи от не подойдёт.
 

iSlayter

Новичок
Топикстартер, покажи структуру таблиц свою, прежде чем вопросы задавать.

Ну... я бы хранил сами названия тестов в одной таблице `tests`.

Вопросы к тестам я бы хранил в таблице `tests_questions` в которой так же было бы поле `test_id` (связь с `tests`).

Ответы я бы хранил в третьей таблице. question_id (связь с `tests_questions`), поле is_right (1 если ответ на вопрос правильный и 0 -- если нет).

Тогда запрос бы выглядел как-то так:

[SQL]SELECT `t`.`title`, MAX(COUNT(`a`.`is_right`)) AS `max_result` FROM `tests` AS `t`
LEFT JOIN `tests_questions` AS `q` ON `t`.`id` = `q`.`test_id`
LEFT JOIN `tests_answers` AS `a` ON `q`.`id` = `a`.`question_id`
WHERE `a`.`is_right` = 1
ORDER BY `max_result` DESC
GROUP BY DATE_FORMAT(`a`.`date`, '%d.%m.%Y')[/SQL]
 

Gas

может по одной?
iSlayter
`t`.`title` никак не связан с MAX( COUNT(...))
а афтар топика ответ уже получил.
 

iSlayter

Новичок
Gas, причём тут связь `t`.`title` и MAX( COUNT(`a`.`is_right`))
в задаче ведь, в любом случае, нужно получить не просто строку с лучшим результатом, а ещё и к какому тесту она относится...
 

scandal

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

Bitterman

Новичок
iSlayter
С чего ты взял, что в результате ты получишь именно тот title, к которому относится MAX(COUNT()) ?

scandal
В чем ты собираешься ему помочь?
 

iSlayter

Новичок
Bitterman, хмм, тогда стоит группировать и по id теста тоже.
"Лучший результат за тест" -- это понятие настолько абстрактное, насколько и "самая вкусная ягода". Тесты бывают разные по сложности, обычно им присваиваются некие коэффициенты сложности выполнения. В этом свете задача автора выглядит как-то вообще нелепо и несерьёзно. Единственный логический подход -- стоит выбирать все тесты за один день, для которых стоит выбирать наиболее результативного отвечающего на них. А в дальнейшем сортировать в нисходящем порядке по коэффициенту сложности и количеству правильных ответов у ответчика.

Как-то так. Вообще интересная задача, на самом деле. И не настолько примитивная, как кажется на первый взгляд.
 

Bitterman

Новичок
iSlayter
Сколько постов данной темы ты прочитал перед тем, как начать сюда писать? Ты действительно не видишь, что все ответы уже даны? Зачем начинать рассуждать о непримитивности задачи и начинать выдавать решения в соответствии со своими придуманными дополнительными условиями?
 
Сверху