ORDER BY && COUNT

Статус
В этой теме нельзя размещать новые ответы.

wbrframe

Новичок
ORDER BY && COUNT

Подскажите пжл, почему так происходит и что можно предпринять.

Запрос должен возвратить количество тестов, которые были сданы успешно, а он делает проверку по старой записи, несмотря на то, что ORDER BY `datetime` DESC:

PHP:
SELECT COUNT( DISTINCT(`idtest`) )
FROM `results` 
WHERE `no_passed` = '0' 
ORDER BY `datetime` DESC
 

zerkms

TDD infected
Команда форума
потому, что сортировка происходит после непосредственно выборки.
 

zerkms

TDD infected
Команда форума
wbrframe
чтобы вам подсказали, как решить вашу задачу - нужно озвучивать задачу, а не показывать своё кривое неработающее решение.

ну а вообще самое простое решение мне кажется будет примерно таким:

список сданных
[sql]
SELECT `idtest` FROM `results` GROUP BY `idtest` HAVING MIN(`no_passed`) = 0
[/sql]

число сданных
[sql]
SELECT COUNT(*) FROM `results` WHERE `no_passed` = 0
[/sql]
 

wbrframe

Новичок
Автор оригинала: zerkms
wbrframe
чтобы вам подсказали, как решить вашу задачу - нужно озвучивать задачу, а не показывать своё кривое неработающее решение.

ну а вообще самое простое решение мне кажется будет примерно таким:

список сданных
[sql]
SELECT `idtest` FROM `results` GROUP BY `idtest` HAVING MIN(`no_passed`) = 0
[/sql]

число сданных
[sql]
SELECT COUNT(*) FROM `results` WHERE `no_passed` = 0
[/sql]
спасибо за ответ.
Ваши варианты тоже не решают задачу. Хотелось бы узнать чем ваше "прямое" решение лучше моего "кривого".
 

zerkms

TDD infected
Команда форума
Ваши варианты тоже не решают задачу. Хотелось бы узнать чем ваше "прямое" решение лучше моего "кривого".
вы не умеете читать? я попросил озвучить задачу, потому как по вашему кривому запросу, судя по всему, её понять невозможно.
 

wbrframe

Новичок
Я конечно благодарю вас за то, что вы ответили в первом посте по человечески, но свое высокомерие пжл оставьте при себе.

Мой запрос работающий, но не решающий задачу. А почему он кривой, очень бы хотелось у вас уточнить.

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

zerkms

TDD infected
Команда форума
wbrframe
повторю ещё раз, для тех, кто в танке. если ваш запрос не решает задачу - то опишите задачу полностью, дабы вам помогли. вам, судя по всему, это не нужно, т.к. просьба описания была 3 поста назад, а вы всё продолжаете философию на тему "ай-ай-ай, у меня запрос не работает, как всё плохо".

-~{}~ 22.03.09 20:35:

А почему он кривой, очень бы хотелось у вас уточнить.
потому, что:
1. он не решает поставленную задачу.
2. он содержит 2 логических ошибки. одну я уже указал, вторая - сортировка там не пришей звезде рукав.
 

wbrframe

Новичок
меня больше волновало, почему корявый. спасибо за ответ.
исправляюсь с формулировкой. Если будет желание и будет что-то сказать, буду только благодарен.

Таблица `results`:


| idresult | idtest | datetime | no_passed | idemployer |
-----------------------------------------------------------------
| 2 | 2 | 2009-03-13 | 0 | 1 |
-----------------------------------------------------------------
| 3 | 2 | 2009-03-14 | 0 | 1 |
-----------------------------------------------------------------
| 4 | 2 | 2009-03-15 | 1 | 1 |
-----------------------------------------------------------------
| 5 | 5 | 2009-03-15 | 1 | 1 |
-----------------------------------------------------------------
| 6 | 5 | 2009-03-15 | 0 | 1 |
-----------------------------------------------------------------
| 7 | 5 | 2009-04-16 | 1 | 3 |
-----------------------------------------------------------------
| 8 | 7 | 2009-04-16 | 1 | 5 |
-----------------------------------------------------------------
| 9 | 7 | 2009-04-13 | 0 | 54 |
-----------------------------------------------------------------
| 10 | 7 | 2009-04-18 | 0 | 4 |
-----------------------------------------------------------------
| 11 | 8 | 2009-04-13 | 0 | 34 |
-----------------------------------------------------------------
| 12 | 9 | 2009-04-11 | 0 | 5 |
-----------------------------------------------------------------

no_passed имеет два состояния:

no_passed = 0 ( тест сдан успешно )
no_passed = 1 ( тест не сдан )

Задача: нужно узнать количество тестов, которые пользователь сдал успешно. Результатов в таблице results для каждого из тестов, может быть сколько угодно, брать нужно только самый последний.

Сразу напрашивается:

- GROUP BY idtest;
- no_passed = 0;
- idemployer = 1; (это неважно)

Проблема в том, как узнать результат по последней дате?
 

zerkms

TDD infected
Команда форума
эм.... если тест УЖЕ УДАЧНО сдан - зачем его сдавать ещё раз? намекаю на то, почему бы просто не посчитать COUNT(*) WHERE

если не вдаваться в немного непонятную логику - то вопрос сводится к классическому "выбрать последнюю запись при группировке" и на форуме обсуждается с периодичностью раз в месяц стабильно - так что в поиск :)
 

Фанат

oncle terrible
Команда форума
вот честное слово, хочется закрывать темы таких нытиков, провоцирующих на флейм.
ему говорят, что надо сделать, а он начинает сопли жевать на тему того, как его все обижают
 

wbrframe

Новичок
Автор оригинала: zerkms
эм.... если тест УЖЕ УДАЧНО сдан - зачем его сдавать ещё раз? намекаю на то, почему бы просто не посчитать COUNT(*) WHERE

если не вдаваться в немного непонятную логику - то вопрос сводится к классическому "выбрать последнюю запись при группировке" и на форуме обсуждается с периодичностью раз в месяц стабильно - так что в поиск :)
Проблема в том, что меня как раз интересует не один тест, а количество сданных успешно, которых может быть n-ое количество. А результат сдачи, можно посмотреть только по последней сдачи которая определяется по datetime. Так что не всё так просто..к сожалению.
 

zerkms

TDD infected
Команда форума
wbrframe
ну так или иначе - вопрос ОЧЕНЬ часто обсуждается, поищи немножко :)
 

wbrframe

Новичок
Автор оригинала: *****
вот честное слово, хочется закрывать темы таких нытиков, провоцирующих на флейм.
ему говорят, что надо сделать, а он начинает сопли жевать на тему того, как его все обижают
а вы сейчас чем занимаетесь?
 

wbrframe

Новичок
Автор оригинала: *****
вот честное слово, хочется закрывать темы таких нытиков, провоцирующих на флейм.
ему говорят, что надо сделать, а он начинает сопли жевать на тему того, как его все обижают
вы бы добавили иконку флага на форум, а то как-то не очень удобно получается.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху