Forum Webscript.Ru

Общие => Базы данных => Тема начата: DJ Fat от 03 Июня 2003, 22:51:43

Название: Как сделать MySQL-запрос с двумя условиями WHERE?
Отправлено: DJ Fat от 03 Июня 2003, 22:51:43
Народ, помогите, пожалуйста. Может быть это выглядит тупо, но мне нужно сделать запрос с двумя условиями WHERE. А именно:
$result = $pafiledb_sql->query($db, "SELECT * FROM $db[prefix]_files WHERE (file_totalvotes == 1) ORDER BY (file_rating/file_totalvotes) WHERE (file_totalvotes > 1) ORDER BY (file_rating/(file_totalvotes - 1)) DESC LIMIT $start,20", 0);

Поясню: если file_totalvotes равен 1, то запрос один, если больше 1, то другой. Возможно ли это? Когда я запускаю этот кусок кода получаю ошибку. Что делать? :o
Заранее спасибо!;)
Название: Как сделать MySQL-запрос с двумя условиями WHERE?
Отправлено: ThE0ReTiC от 04 Июня 2003, 00:11:24
Цитировать
DJ Fat:
Что делать?

ИМХО немного поправить алгоритм, ибо должна нормально отрабатывать конструкция file_rating/file_totalvotes
Название: Как сделать MySQL-запрос с двумя условиями WHERE?
Отправлено: Макс от 04 Июня 2003, 00:55:06
DJ Fat
Во-первых, нужно сюда код ошибки постить (услуги телепатов тебе не по карману)
Во-вторых по-моему так как ты пишешь -  неправильно (2 where использовать нельзя). Наверное должно быть что-то вроде этого:
"SELECT * FROM $db[prefix]_files
   WHERE
   (file_totalvotes == 1)
   OR
   (file_totalvotes > 1)
ORDER BY
    (file_rating/file_totalvotes),  
    (file_rating/(file_totalvotes - 1)) DESC LIMIT $start,20"

хотя я не очень понял, что именно ті хочешь сделать своим запросом.
Название: Как сделать MySQL-запрос с двумя условиями WHERE?
Отправлено: ThE0ReTiC от 04 Июня 2003, 10:12:24
Макс
ИМХО немного не так (но 2 WHERE действительно нельзя)
он пытается ответвить запрос:
если file_totalvotes = 1 то file_rating/file_totalvotes
иначе
file_rating/(file_total_votes - 1)

DJ Fat
http://www.mysql.com/doc/en/Control_flow_functions.html
Название: Как сделать MySQL-запрос с двумя условиями WHERE?
Отправлено: DJ Fat от 04 Июня 2003, 12:03:23
Народ, я немного проясню ситуацию. У меня база данных ди-джейских миксов, с системой рейтнга. Короче за каждый микс можно проголосовать по 10-балльной системе. Рейтинг вычисляется по формуле количество набранных баллов / количество голосов. Но проблема вот в чём: почему-то создатели скрипта количество голосов по умолчанию ставят на 1! Т.е. когда за микс не голосовали у него totalvotes = 1! Тупо, на мой взгляд, но я ничего сделать не могу - не буду же я переписывать скрипт. А из-за того, что по умолчанию 1, при выводе в запросе приходится вычитать эту самую единицу, логично? А что будет, если у микса нет голосов? Будет 1 - 1, а это бред. Так вот чтобы избежать этого бреда я и придумал сделать два WHERE. Может теперь стало яснее и может какие-то другие способы пришли в голову? Жду советов ;)
Название: Как сделать MySQL-запрос с двумя условиями WHERE?
Отправлено: DJ Fat от 04 Июня 2003, 12:04:02
Макс
Щас попробую твой запрос.
Название: Как сделать MySQL-запрос с двумя условиями WHERE?
Отправлено: ThE0ReTiC от 04 Июня 2003, 14:02:29
DJ Fat
Запрос макса все равно будет делить на 0
а почему нельза totalvotes сделать 0 по умолчанию и выбирать:
SELECT * FROM $db[prefix]_files
WHERE
file_totalvotes > 0
ORDER BY
(file_rating/file_totalvotes)
...

?
Название: Как сделать MySQL-запрос с двумя условиями WHERE?
Отправлено: ThE0ReTiC от 04 Июня 2003, 14:04:48
и потом малопонятно, почему:
Цитировать

когда за микс не голосовали у него totalvotes = 1

а не 0
если за него не голосовали ни разу то количество голосов по законам математики = 0 а не 1 :)
Название: Как сделать MySQL-запрос с двумя условиями WHERE?
Отправлено: DJ Fat от 04 Июня 2003, 20:01:47
ThE0ReTiC
Мне тоже не совсем понятно почему у них 1 по умолчанию... я же говорю, не я автор скрипта. Вот, смотри, чтобы убедится даю скриншот, где видно - неоцененные миксы имеют totalvotes 1.
(http://www.mixgalaxy.ru/images/temp/totalvotes.gif)
Может как-то можно обойти проблему?
Название: Как сделать MySQL-запрос с двумя условиями WHERE?
Отправлено: ThE0ReTiC от 04 Июня 2003, 20:50:01
DJ Fat
а переписать никак?
по умолчанию-то знаяение, как я погляжу, можно
Название: Как сделать MySQL-запрос с двумя условиями WHERE?
Отправлено: DJ Fat от 04 Июня 2003, 23:08:49
ThE0ReTiC
Это непосильная работа, скрипт очень объёмистый... кстати, я не думаю, что авторы скрипта это сделали по-ошибке или просто так, как раз наоборот, наверное в этом была потребность. Короче говоря, мой вопрос заключался в том, как ОБОЙТИ эту проблему, а о переписке скрипта вопрос не вставал :)
Название: Как сделать MySQL-запрос с двумя условиями WHERE?
Отправлено: alex_24 от 03 Сентября 2003, 01:35:41
так использую HAVING вместо второго условия WHERE!!!