Помогите с SQL запросом

12 3
mff
На сайте с 21.02.2008
Offline
266
mff
1334

Помогите с запросом, нужно из базы выбрать 20 строчек с наибольшим рейтингом и полученное отсортировать по стане:

Пробывал так:

select * from (select * from `base` where `show`='1' ORDER BY `rating` DESC LIMIT 0, 20) as a ORDER BY `country` ASC

не получилось скрин :(

SI
На сайте с 19.12.2007
Offline
77
#1

зачем as a?

SELECT * FROM base

WHERE id IN (SELECT id FROM base WHERE show=1 ORDER BY rating DESC LIMIT 20)

ORDER BY country

рисуем, верстаем, кодим и крутим ...аа, да, еще принимаем заказы (:
T
На сайте с 24.07.2008
Offline
132
#2

Какой-то бред

почему нельзя так:


SELECT * FROM base
WHERE show = 1
ORDER BY rating DESC, country
LIMIT 20
mff
На сайте с 21.02.2008
Offline
266
mff
#3

Ага, выяснил, страны оказалось хранятся в другой табличке :( А в этой только номера (id) стран. Как же быть?

PyMbIH
На сайте с 22.11.2009
Offline
76
#4
mff:
Ага, выяснил, страны оказалось хранятся в другой табличке :( А в этой только номера (id) стран. Как же быть?

Это риторический вопрос... Главное кто виноват!🙅

T
На сайте с 24.07.2008
Offline
132
#5
mff:
Ага, выяснил, страны оказалось хранятся в другой табличке :( А в этой только номера (id) стран. Как же быть?

Я не уверен в какой таблице находится поле "show", если в таблице с рейтингами то так:

SELECT id_country FROM table_country as tc

LEFT JOIN table_rating_country as trc ON trc.id_country = tc.id_country
WHERE tc.show = 1
ORDER BY trc.rating DESC
LIMIT 20

если в таблице с странами то вместа trc.show надо написать tc.show

mff
На сайте с 21.02.2008
Offline
266
mff
#6

Tempter спасибо, вот прописал, но сортирует не по стране выбранное, а по рейтингу.

SELECT * FROM country as country

LEFT JOIN base_ as base_ ON base_.country = country.id
WHERE base_.show = 1
ORDER BY base_.rating DESC
LIMIT 20

country - табличка со странами, в ней id (он равен id_channel из таблички base_) и title название страны

base_ - табличка с каналами, в ней же рейтинг, id стран и show

Нужно, чтобы сначало запрос отбирал из таблички base_ 20 записей с наибольшим рейтингом, а потом полученный результат отсортировать по названию страны (title) в алфавитном порядке

T
На сайте с 24.07.2008
Offline
132
#7

SELECT * FROM country as country

LEFT JOIN base_ as base_ ON base_.country = country.id
WHERE base_.show = 1
ORDER BY base_.rating DESC, country.title
LIMIT 20

Tempter добавил 25.12.2009 в 17:03

Хотя. наверно не сработает

и отсортировать придется в коде PHP

mff
На сайте с 21.02.2008
Offline
266
mff
#8

Tempter ага, все равно по рейтингу сортировка :(

[Удален]
#9
Я не уверен в какой таблице находится поле "show", если в таблице с рейтингами то так:

может выложите структуру бд ;) чтобы мы не гадали тут

SI
На сайте с 19.12.2007
Offline
77
#10

SELECT base.*,countries.name

FROM base LEFT JOIN countries ON (base.id_country=countries.id)

WHERE base.id IN (SELECT id FROM base WHERE show=1 ORDER BY rating DESC LIMIT 20)

ORDER BY base.id_country

попробуй?

12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий