Несколько условий в SQL запросе для одного поля

  • Автор темы BeatBox
  • Дата начала

BeatBox

Guest
Несколько условий в SQL запросе для одного поля

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

есть запрос, который выбирает среднее знач. определенных полей, вида select .... AVG(b.filed) as first ......
мне очень нужно сделать так, чтобы выбиралось среднее значение не всех filed, а только тех, где в той же таблице поле filed2= например 1. и точно также в этом запросе сделать среднее значение опять этих же filed только уже где поле filedХ будет равно "Яблоко". Например. Вот запрос, над которым я ломаю голову последние несколько дней и упорно последние три часа:

PHP:
"SELECT a.game_id as game_id, UNIX_TIMESTAMP(a.date) as formatted, a.title as title, COUNT(b.vote_mark) as tttls, AVG(b.vote_mark) as vote_mark FROM ".$prefix."_pages as a LEFT JOIN ".$prefix."_vote as b on (a.game_id=b.vote_id)  $resultwhere GROUP BY a.pid ORDER BY $sortby $stype $limit"
тоесть нужно сделать чтобы не просто высчитывалось
AVG(b.vote_mark) as vote_mark
а сначала AVG(b.vote_mark) as vote_mark где поле b.filed = 1
а потом AVG(b.vote_mark) as vote_mark2 где поле b.filed2 = 2
Можно так сделать?

-~{}~ 02.04.05 01:51:

забыл добавить - самое сложное это то что все это нужно сложить в один запрос т.к. это все потом идет в WHILE
 

neko

tеam neko
добавь проверку в запрос и сделай по ее результатам группировку
 

BeatBox

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

BeatBox

Guest
Да, у меня MySql
все-таки ничего пока неполучаеться :( Беда какая-то :(

-~{}~ 02.04.05 02:05:

neko
из Вашего примера неособо понял как мне мой запрос подредактировать, я просто про case в запросах впервые слышу :(

-~{}~ 02.04.05 02:09:

например мне покачто сделать хотябы так:
AVG(b.vote_mark) общее, и AVG(b.vote_mark) где user_voted='test' в таблице table_vote
 

neko

tеam neko
а вот это уже невозможно
и помоему ты нечто иное хотел двумя постами выше, нет?
 

BeatBox

Guest
хотел тоже самое только написал не так..

Тоесть получаеться что нельзя просчитать среднее значение полей, и средне значение этих же полей но с ограничением (where field='test') ? Очень-очень плохо :(
 

neko

tеam neko
сделай два запроса
после чего можешь их объединить
но вообще типичная бессмыслица
"как мне выбрать средний вес черепа и толщину слона одним запросом"
 

BeatBox

Guest
тогда другой вопрос - как мне сделать два запроса и обьединить их в WHILE.
Или может Вы подскажете как сделать запрос в запросе? Тогда все упроститься до минимума
 

neko

tеam neko
я думаю тебе очень быстро напишут запрос

если ты в конце концов
вместо этих пространных расуждений и скомканного php кода, покажешь
а) данные
б) что тебе нужно из них получить
с) каким запросом ты это пытаешся делать сам

а пока что, я как-то даже и не знаю с какой стороны подойти к проблеме "объединения в WHILE"
 

BeatBox

Guest
"SELECT a.game_id as game_id, UNIX_TIMESTAMP(a.date) as formatted, a.title as title, COUNT(b.vote_mark) as tttls, AVG(b.vote_mark) as vote_mark FROM ".$prefix."_pages as a LEFT JOIN ".$prefix."_vote as b on (a.game_id=b.vote_id) $resultwhere GROUP BY a.pid ORDER BY $sortby $stype $limit"

выше - тот запрос которым я пользуюсь сейчас. в нем строка (жирным выделенная) просчитывает результаты голосований. Данные про голосования беруться из таблицы с такой структурой:
vote_id | vote_mark | user_voted

Код (тот что вверху) считает среднее значение полей vote_mark, где поле vote_id равняеться полю game_id из таблицы статьи (основной, той откуда беруться другие данные в самом верхнем запросе).

Мне нужно чтобы помимо просто средней оценки, считалась также среднее значение полей vote_mark, где поле vote_id и поле user_voted='admin' or user_voted='admin2' и так далее римерно таких админов 5-6 - тоесть считаеться средняя оценка всех голосовавших администраторов.

-~{}~ 02.04.05 02:49:

вот полный код с вайлом:
PHP:
$resultre = $db->sql_query("SELECT a.game_id as game_id, UNIX_TIMESTAMP(a.date) as formatted, a.title as title, COUNT(b.vote_mark) as tttls, AVG(b.vote_mark) as vote_mark FROM ".$prefix."_pages as a LEFT JOIN ".$prefix."_vote as b on (a.game_id=b.vote_id)  $resultwhere GROUP BY a.pid ORDER BY $sortby $stype $limit");

while ($rowre = $db->sql_fetchrow($resultre)) {
-~{}~ 02.04.05 03:04:

или как совместить два запроса в WHILE?

-~{}~ 02.04.05 03:18:

УУУУУУУУУУУУУРРРРРРРРРРРРРААААААААААААА!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Сделал! Методом научного тыка!
сделал ещё один запрос и потом в вайл:
while (($rowre = $db->sql_fetchrow($resultre)) && ($rowre2 = $db->sql_fetchrow($resultre2))) {

-~{}~ 02.04.05 04:34:

хех, и все-таки было бы неплохо все это совместить в одном запросе так как при варианте "два запроса соединенные в while" - нельзя сделаь сортировку по оценкам общим\админа
 
Сверху