Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помогите слепить запрос ORDER BY, ORDER BY 
V
    Опции темы
V13
Дата 5.5.2009, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 5.9.2007

Репутация: нет
Всего: 1



здравствуйте в обчем запрос работает

Код

$query = "SELECT games.name AS game, games.city, games.designer, games.text, games.id, players.id, players.name, players.icon, ratings.gameid, AVG(ratings.stars) AS stars, COUNT(game)
FROM games, players, ratings, rooms, standings WHERE games.enable = 1 AND games.designer = players.id AND games.id = ratings.gameid AND rooms.game = games.id 
AND rooms.id = standings.room GROUP BY game ORDER BY COUNT(game) DESC, AVG(ratings.stars) DESC LIMIT 10";


только здесь 
Код
GROUP BY game ORDER BY COUNT(game) DESC, AVG(ratings.stars) DESC LIMIT 10
 мне нужно что-то вроде: ентого 
Код

GROUP BY game ORDER BY (COUNT(game) * AVG(ratings.stars)) DESC LIMIT 10 
 и вор ето как раз не работает, как етот запрос правильно оформить можно.

заранее благодарен smile 
PM MAIL   Вверх
ТоляМБА
Дата 5.5.2009, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 10
Всего: 252



V13, выводи в Select
(COUNT(game) * AVG(ratings.stars))
и сортируй потом по нему. Кстати ORDER BY допускает сортировку по порядковому номеру поля из Select, например ORDER BY 2, 4 в твоём примере равнозначно ORDER BY games.city, games.text
PM   Вверх
V13
Дата 5.5.2009, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 5.9.2007

Репутация: нет
Всего: 1



Код

$query = "SELECT games.name AS game, games.city, games.designer, games.text, games.id, players.id, players.name, players.icon, ratings.gameid, (COUNT(game) * AVG(ratings.stars) AS stars) 
FROM games, players, ratings, rooms, standings WHERE games.enable = 1 AND games.designer = players.id AND games.id = ratings.gameid AND rooms.game = games.id 
AND rooms.id = standings.room GROUP BY game ORDER BY (COUNT(game) * AVG(ratings.stars) AS stars) DESC LIMIT 10";


если так, то вот че получаетси

ругается 

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS stars) FROM games, players, ratings, rooms, standings WHERE games.enable = 1' at line 1

Добавлено через 6 минут и 21 секунду
Код

$query = "SELECT games.name AS game, games.city, games.designer, games.text, games.id, players.id, players.name, players.icon, ratings.gameid, AVG(ratings.stars) AS stars, COUNT(game), (COUNT(game)*AVG(ratings.stars)) 
FROM games, players, ratings, rooms, standings WHERE games.enable = 1 AND games.designer = players.id AND games.id = ratings.gameid AND rooms.game = games.id 
AND rooms.id = standings.room GROUP BY game ORDER BY (COUNT(game)*AVG(ratings.stars)) DESC LIMIT 10";


вот работает, но сортитует неправильно
PM MAIL   Вверх
DimW
Дата 5.5.2009, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 4
Всего: 44



Цитата(V13 @  5.5.2009,  14:10 Найти цитируемый пост)
но сортитует неправильно

а так?:
Код

SELECT games.name AS game
      ,games.city
      ,games.designer
      ,games.text
      ,games.id
      ,players.id
      ,players.name
      ,players.icon
      ,ratings.gameid
      ,AVG(ratings.stars) AS stars
      ,COUNT(game)
      ,COUNT(game) * AVG(ratings.stars) as stars
  FROM games
      ,players
      ,ratings
      ,rooms
      ,standings
 WHERE games.enable = 1
   AND games.designer = players.id
   AND games.id = ratings.gameid
   AND rooms.game = games.id
   AND rooms.id = standings.room
 GROUP BY game
 ORDER BY stars DESC LIMIT 10

PM MAIL ICQ   Вверх
ТоляМБА
Дата 5.5.2009, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 10
Всего: 252



Цитата(DimW @  5.5.2009,  16:40 Найти цитируемый пост)
      ,AVG(ratings.stars) AS stars      
,COUNT(game)      
,COUNT(game) * AVG(ratings.stars) as stars


DimW, может я чего то недопонимаю, но разве SQL допускает в одном селекте вывод столбцов с одинаковыми именами/псевдонимами?
PM   Вверх
DimW
Дата 5.5.2009, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 4
Всего: 44



Цитата(ТоляМБА @  5.5.2009,  14:56 Найти цитируемый пост)
DimW, может я чего то недопонимаю, но разве SQL допускает в одном селекте вывод столбцов с одинаковыми именами/псевдонимами?

допускает (пример под оракл):
Код

SQL> select 1 as x, 2 as x, 3 as x from dual
  2  /
 
         X          X          X
---------- ---------- ----------
         1          2          3
 


но сортировка не будет работать:
Код

select 1 as x, 2 as x, 3 as x from dual order by x
 
ORA-00960: ambiguous column naming in select list


я просто не увидел что этот алиас уже используется, спасибо за замечание
PM MAIL ICQ   Вверх
V13
Дата 5.5.2009, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 5.9.2007

Репутация: нет
Всего: 1



так как пробовать то smile 
PM MAIL   Вверх
DimW
Дата 5.5.2009, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 4
Всего: 44



Цитата(V13 @  5.5.2009,  15:15 Найти цитируемый пост)
так как пробовать то

Код

SELECT games.name AS game
      ,games.city
      ,games.designer
      ,games.text
      ,games.id
      ,players.id
      ,players.name
      ,players.icon
      ,ratings.gameid
      ,AVG(ratings.stars) AS stars
      ,COUNT(game)
      ,COUNT(game) * AVG(ratings.stars) as stars_2
  FROM games
      ,players
      ,ratings
      ,rooms
      ,standings
 WHERE games.enable = 1
   AND games.designer = players.id
   AND games.id = ratings.gameid
   AND rooms.game = games.id
   AND rooms.id = standings.room
 GROUP BY game
 ORDER BY stars_2 DESC LIMIT 10

PM MAIL ICQ   Вверх
V13
Дата 5.5.2009, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 5.9.2007

Репутация: нет
Всего: 1



сортирует не правильно smile

Добавлено через 4 минуты и 15 секунд
DimW и ТоляМБА огромное спасибо, все заработало!!! smile  Ну и в знак благодарности +1.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0715 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.