X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Нужно сделать ТОП 10 при выборке из 3 столбцов
Mist_hb
Mist_hb
Topic Starter сообщение 11.2.2017, 21:38; Ответить: Mist_hb
Сообщение #1


Всем привет! Надо помощь. Нужно сделать ТОП 10 т.е. найти 10 максимальных чисел из трех столбцов базы: summa1, summa2,summa3 (не по отдельности а сразу из 3 столбцов) при этом не потерять ключи

[attachment=41231:mysql.png]

Перебробывал все что знал результатов не дало(
Подскажи в какую сторону смотреть. Может это все возможно отсортировать сразу в Mysql или придется перебирать массивы в php.
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mist_hb
Mist_hb
Topic Starter сообщение 12.2.2017, 17:47; Ответить: Mist_hb
Сообщение #2


Проблема решена)

SELECT id,summa1 as maxVal FROM table_name
UNION ALL
select id,summa2 FROM table_name
UNION ALL
SELECT id,summa3 FROM table_name
ORDER BY maxVal DESC
LIMIT 10;
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Degradator
Degradator
сообщение 13.2.2017, 16:46; Ответить: Degradator
Сообщение #3


Я так предполагаю что запрос написан не правильно(или может правильно, но не очевидно, поскольку мне не понятно что ORDER by и limit применяются ко всей выборке, а не к последнему запросу), должно быть вот так

(
SELECT id,summa1 as maxVal FROM table_name UNION ALL
select id,summa2 FROM table_name UNION ALL
SELECT id,summa3 FROM table_name
) as t1
ORDER BY maxVal DESC LIMIT 10 ;


Ну и возможно что вот такой запрос работать будет быстрее, поскольку ты утраиваешь размер данных, и скорее всего, в определенный момент, у базы данных закончится память, и она начнет писать на диск.
(
SELECT id,summa1 as maxVal FROM table_name ORDER BY maxVal LIMIT 10
UNION ALL
select id,summa2 FROM table_name ORDER BY summa2 LIMIT 10
UNION ALL
SELECT id,summa3 FROM table_name ORDER BY summa3 LIMIT 10
) as t1
ORDER BY maxVal DESC LIMIT 10 ;
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mist_hb
Mist_hb
Topic Starter сообщение 13.2.2017, 20:44; Ответить: Mist_hb
Сообщение #4


не один из вариантов не сработал выдали ошибку
1 вариант:

(
SELECT id,summa1 as maxVal FROM gabl_resultplayers UNION ALL
select id,summa2 FROM gabl_resultplayers UNION ALL
SELECT id,summa3 FROM gabl_resultplayers
) as t1
ORDER BY maxVal DESC LIMIT 10 ;
[Err] 1064 - 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 'UNION ALL
select id,summa2 FROM gabl_resultplayers UNION ALL
SELECT id,summa3' at line 3


2 вариант:

(
SELECT id,summa1 as maxVal FROM gabl_resultplayers ORDER BY maxVal LIMIT 10
UNION ALL
select id,summa2 FROM gabl_resultplayers ORDER BY summa2 LIMIT 10
UNION ALL
SELECT id,summa3 FROM gabl_resultplayers ORDER BY summa3 LIMIT 10
) as t1
ORDER BY maxVal DESC LIMIT 10 ;
[Err] 1064 - 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 'UNION ALL
select id,summa2 FROM gabl_resultplayers ORDER BY summa2 LIMIT 10
UN' at line 3


при этом мой вариант работает без броблем
первой выборке присваивается maxVal после объединяется со 2 и 3 выборкой и сортируется ORDER BY maxVal и LIMIT уже выбирает 10 первых значений
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Degradator
Degradator
сообщение 13.2.2017, 20:57; Ответить: Degradator
Сообщение #5


(
(SELECT id,summa1 as maxVal FROM table_name ORDER BY maxVal LIMIT 10 )
UNION ALL
(select id,summa2 FROM table_name ORDER BY summa2 LIMIT 10 )
UNION ALL
(SELECT id,summa3 FROM table_name ORDER BY summa3 LIMIT 10 )
) as t1
ORDER BY maxVal DESC LIMIT 10 ;


вот так должно работать
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mist_hb
Mist_hb
Topic Starter сообщение 13.2.2017, 21:30; Ответить: Mist_hb
Сообщение #6


Опять же не работает!
Но заглянув в мануал нашлось решение вариант был почти правильным)
Решение ограничить каждый запрос лимитом это плюсик в карму за это спасибо)

(SELECT id,summa1 as maxVal FROM gabl_resultplayers ORDER BY summa1 DESC LIMIT 10 )
UNION ALL
(select id,summa2 FROM gabl_resultplayers ORDER BY summa2 DESC LIMIT 10 )
UNION ALL
(SELECT id,summa3 FROM gabl_resultplayers ORDER BY summa3 DESC LIMIT 10 )
ORDER BY maxVal DESC LIMIT 10 ;
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Den1xxx
Den1xxx
сообщение 14.2.2017, 12:49; Ответить: Den1xxx
Сообщение #7


(Mist_hb @ 12.2.2017, 00:38) *
Нужно сделать ТОП 10 т.е. найти 10 максимальных чисел из трех столбцов базы: summa1, summa2,summa3 (не по отдельности а сразу из 3 столбцов) при этом не потерять ключи

select id,summa1,summa2,summa3 FROM table_name order by summa1,summa2,summa3 desc LIMIT 10
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mist_hb
Mist_hb
Topic Starter сообщение 14.2.2017, 15:22; Ответить: Mist_hb
Сообщение #8


(Den1xxx @ 14.2.2017, 15:49) *
select id,summa1,summa2,summa3 FROM table_name order by summa1,summa2,summa3 desc LIMIT 10


Ваше условие не подходит:
1.(не по отдельности а сразу из 3 столбцов) ваше условие сортирует только первую колонку.
2. Не происходит их объединение для получения общего результата.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Alcorn
Alcorn
сообщение 15.2.2017, 3:37; Ответить: Alcorn
Сообщение #9


SELECT id, summa1, summa2, summa3 FROM table_name ORDER BY GREATEST(summa1, summa2, summa3) DESC LIMIT 10
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mist_hb
Mist_hb
Topic Starter сообщение 15.2.2017, 18:33; Ответить: Mist_hb
Сообщение #10


(Alcorn @ 15.2.2017, 06:37) *
SELECT id, summa1, summa2, summa3 FROM table_name ORDER BY GREATEST(summa1, summa2, summa3) DESC LIMIT 10


GREATEST неподходит, так как он выбирает максимальные значения, а мне надо полный список хоть топ 10 будет занимать один человек.

Тему можно закрывать решение уже найдено.

(Mist_hb @ 12.2.2017, 20:47) *
Проблема решена)

SELECT id,summa1 as maxVal FROM table_name
UNION ALL
select id,summa2 FROM table_name
UNION ALL
SELECT id,summa3 FROM table_name
ORDER BY maxVal DESC
LIMIT 10;


Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Продвижение сайтов в ТОП-1 за сутки. Бесплатный тест!
13 matias 3256 26.3.2024, 19:53
автор: matias
Горячая тема (нет новых ответов) Dao.AD: пуши, попсы и не только! ТОП монетизация и арбитраж. | Акция 100 % отчисления!
82 Daopush 25759 22.3.2024, 20:23
автор: Daopush
Открытая тема (нет новых ответов) Мегамаркет. Скидка 1000 рублей при покупке от 5000 рублей на все, на первый заказ.
Мегамаркет. Скидка 1000 рублей при покупке от 5000 рублей на все, на п
6 stu999 1551 21.3.2024, 20:45
автор: stu999
Открытая тема (нет новых ответов) Нужно разносить телеграм каналы по разным аккаунтам?
9 Mixatraider 1815 20.3.2024, 18:34
автор: Rebex
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыПродвижение сайтов в ТОП Яндекса за 2 недели. Рост позиций и трафика
Бесплатный тест
19 Konrod 9796 18.3.2024, 10:04
автор: Konrod


 



RSS Текстовая версия Сейчас: 28.3.2024, 19:34
Дизайн