Автор Тема: Как сделать MySQL-запрос с двумя условиями WHERE?  (Прочитано 5454 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн DJ Fat

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 158
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.mixgalaxy.ru/
Народ, помогите, пожалуйста. Может быть это выглядит тупо, но мне нужно сделать запрос с двумя условиями 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
Заранее спасибо!;)
C уважением, DJ Fat
MixGalaxy.ru - Форумы MixGalaxy.ru - Всё о FruityLoops - eJay.ru[

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
Цитировать
DJ Fat:
Что делать?

ИМХО немного поправить алгоритм, ибо должна нормально отрабатывать конструкция file_rating/file_totalvotes
AS IS...

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
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"

хотя я не очень понял, что именно ті хочешь сделать своим запросом.
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
Макс
ИМХО немного не так (но 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
AS IS...

Оффлайн DJ Fat

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 158
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.mixgalaxy.ru/
Народ, я немного проясню ситуацию. У меня база данных ди-джейских миксов, с системой рейтнга. Короче за каждый микс можно проголосовать по 10-балльной системе. Рейтинг вычисляется по формуле количество набранных баллов / количество голосов. Но проблема вот в чём: почему-то создатели скрипта количество голосов по умолчанию ставят на 1! Т.е. когда за микс не голосовали у него totalvotes = 1! Тупо, на мой взгляд, но я ничего сделать не могу - не буду же я переписывать скрипт. А из-за того, что по умолчанию 1, при выводе в запросе приходится вычитать эту самую единицу, логично? А что будет, если у микса нет голосов? Будет 1 - 1, а это бред. Так вот чтобы избежать этого бреда я и придумал сделать два WHERE. Может теперь стало яснее и может какие-то другие способы пришли в голову? Жду советов ;)
C уважением, DJ Fat
MixGalaxy.ru - Форумы MixGalaxy.ru - Всё о FruityLoops - eJay.ru[

Оффлайн DJ Fat

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 158
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.mixgalaxy.ru/
Макс
Щас попробую твой запрос.
C уважением, DJ Fat
MixGalaxy.ru - Форумы MixGalaxy.ru - Всё о FruityLoops - eJay.ru[

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
DJ Fat
Запрос макса все равно будет делить на 0
а почему нельза totalvotes сделать 0 по умолчанию и выбирать:
SELECT * FROM $db[prefix]_files
WHERE
file_totalvotes > 0
ORDER BY
(file_rating/file_totalvotes)
...

?
AS IS...

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
и потом малопонятно, почему:
Цитировать

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

а не 0
если за него не голосовали ни разу то количество голосов по законам математики = 0 а не 1 :)
AS IS...

Оффлайн DJ Fat

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 158
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.mixgalaxy.ru/
ThE0ReTiC
Мне тоже не совсем понятно почему у них 1 по умолчанию... я же говорю, не я автор скрипта. Вот, смотри, чтобы убедится даю скриншот, где видно - неоцененные миксы имеют totalvotes 1.

Может как-то можно обойти проблему?
C уважением, DJ Fat
MixGalaxy.ru - Форумы MixGalaxy.ru - Всё о FruityLoops - eJay.ru[

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
DJ Fat
а переписать никак?
по умолчанию-то знаяение, как я погляжу, можно
AS IS...

Оффлайн DJ Fat

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 158
  • +0/-0
  • 0
    • Просмотр профиля
    • http://www.mixgalaxy.ru/
ThE0ReTiC
Это непосильная работа, скрипт очень объёмистый... кстати, я не думаю, что авторы скрипта это сделали по-ошибке или просто так, как раз наоборот, наверное в этом была потребность. Короче говоря, мой вопрос заключался в том, как ОБОЙТИ эту проблему, а о переписке скрипта вопрос не вставал :)
C уважением, DJ Fat
MixGalaxy.ru - Форумы MixGalaxy.ru - Всё о FruityLoops - eJay.ru[

Оффлайн alex_24

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 9
  • +0/-0
  • 0
    • Просмотр профиля
    • http://forum.webcommand.ru
Как сделать MySQL-запрос с двумя условиями WHERE?
« Ответ #11 : 03 Сентября 2003, 01:35:41 »
так использую HAVING вместо второго условия WHERE!!!

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28