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
 
потому, что сортировка происходит после непосредственно выборки.
 
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
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
повторю ещё раз, для тех, кто в танке. если ваш запрос не решает задачу - то опишите задачу полностью, дабы вам помогли. вам, судя по всему, это не нужно, т.к. просьба описания была 3 поста назад, а вы всё продолжаете философию на тему "ай-ай-ай, у меня запрос не работает, как всё плохо".

-~{}~ 22.03.09 20:35:

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

Таблица `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; (это неважно)

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

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

если не вдаваться в немного непонятную логику - то вопрос сводится к классическому "выбрать последнюю запись при группировке" и на форуме обсуждается с периодичностью раз в месяц стабильно - так что в поиск :-)
Проблема в том, что меня как раз интересует не один тест, а количество сданных успешно, которых может быть n-ое количество. А результат сдачи, можно посмотреть только по последней сдачи которая определяется по datetime. Так что не всё так просто..к сожалению.
 
wbrframe
ну так или иначе - вопрос ОЧЕНЬ часто обсуждается, поищи немножко :-)
 
Автор оригинала: *****
вот честное слово, хочется закрывать темы таких нытиков, провоцирующих на флейм.
ему говорят, что надо сделать, а он начинает сопли жевать на тему того, как его все обижают
а вы сейчас чем занимаетесь?
 
Автор оригинала: *****
вот честное слово, хочется закрывать темы таких нытиков, провоцирующих на флейм.
ему говорят, что надо сделать, а он начинает сопли жевать на тему того, как его все обижают
вы бы добавили иконку флага на форум, а то как-то не очень удобно получается.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху