Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > помогите слепить запрос ORDER BY


Автор: V13 5.5.2009, 13:27
здравствуйте в обчем запрос работает

Код

$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 

Автор: ТоляМБА 5.5.2009, 14:00
V13, выводи в Select
(COUNT(game) * AVG(ratings.stars))
и сортируй потом по нему. Кстати ORDER BY допускает сортировку по порядковому номеру поля из Select, например ORDER BY 2, 4 в твоём примере равнозначно ORDER BY games.city, games.text

Автор: V13 5.5.2009, 14:10
Код

$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";


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

Автор: DimW 5.5.2009, 14:40
Цитата(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

Автор: ТоляМБА 5.5.2009, 14:56
Цитата(DimW @  5.5.2009,  16:40 Найти цитируемый пост)
      ,AVG(ratings.stars) AS stars      
,COUNT(game)      
,COUNT(game) * AVG(ratings.stars) as stars


DimW, может я чего то недопонимаю, но разве SQL допускает в одном селекте вывод столбцов с одинаковыми именами/псевдонимами?

Автор: DimW 5.5.2009, 15:09
Цитата(ТоляМБА @  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


я просто не увидел что этот алиас уже используется, спасибо за замечание

Автор: V13 5.5.2009, 15:15
так как пробовать то smile 

Автор: DimW 5.5.2009, 15:41
Цитата(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

Автор: V13 5.5.2009, 15:56
сортирует не правильно smile

Добавлено через 4 минуты и 15 секунд
DimW и ТоляМБА огромное спасибо, все заработало!!! smile  Ну и в знак благодарности +1.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)