За последние 24 часа нас посетили 18412 программистов и 1704 робота. Сейчас ищут 934 программиста ...

ТОП 10 при выборке из 3 столбцов таблицы Mysql

Тема в разделе "PHP и базы данных", создана пользователем lVlist, 12 фев 2017.

  1. lVlist

    lVlist Активный пользователь

    С нами с:
    12 фев 2017
    Сообщения:
    20
    Симпатии:
    5
    Всем привет! Надо помощь. Немогу сделать ТОП 10 т.е. найти 10 максимальных чисел из трех столбцов таблицы: summa1, summa2, summa3 (не по отдельности а сразу из 3 столбцов) при этом не потерять ключи
    mysql.png
    Подскажи в какую сторону смотреть. Может это все возможно отсортировать сразу в Mysql или придется перебирать массивы в php.
     
  2. TeslaFeo

    TeslaFeo Старожил

    С нами с:
    9 мар 2016
    Сообщения:
    2.984
    Симпатии:
    759
    Мне мозгов хватает только на следующее:
    Тремя запросами вытаскиваем по 10 максимальных значений из трех столбцов.
    Получаем 3 двумерных массива, которые объединяем в один, из которого получаем 10 максимальных значений.
    Но это, скорее всего, костыль и можно сделать лучше...
     
  3. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    lVlist нравится это.
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Какие ключи не надо терять?
     
  5. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Код (Text):
    1. SELECT id,GREATEST(summa1,summa2,summa3) as result
    2. FROM table_name
    3. ORDER BY result DESC
    4. LIMIT 10;
     
    lVlist и TeslaFeo нравится это.
  6. lVlist

    lVlist Активный пользователь

    С нами с:
    12 фев 2017
    Сообщения:
    20
    Симпатии:
    5
    Большое спасибо! Все работает!
     
    denis01 нравится это.
  7. lVlist

    lVlist Активный пользователь

    С нами с:
    12 фев 2017
    Сообщения:
    20
    Симпатии:
    5
    Ребят есть проблема. Данная функция выбирает максимальную сумму игрока. Т.е мы имеем только одну запись игрока с максимальной суммой после выполнения функции. А надо чтобы были все результаты т.е в топ 10 может быть один и тот же человек хоть 5 раз если его суммы больше других.
     
  8. lVlist

    lVlist Активный пользователь

    С нами с:
    12 фев 2017
    Сообщения:
    20
    Симпатии:
    5
    Проблема решена! Спасибо @alexblack!
    Код (Text):
    1. SELECT id,summa1 as maxVal FROM table_name
    2. UNION ALL
    3. select id,summa2 FROM table_name
    4. UNION ALL
    5. SELECT id,summa3 FROM table_name
    6. ORDER BY maxVal DESC
    7. LIMIT 10;
    Есть один камень с которым я столкнулся по неопытности, кому то может пригодится. При объединении таблиц, объединение надо записывать в каждый SELECT. Покажу на своем примере.

    Код (Text):
    1. SELECT gabl_command.img_command, gabl_games.game, gabl_games.date, gabl_players.players,gabl_resultplayers.summa1 as result FROM gabl_resultplayers
    2. INNER JOIN gabl_command ON gabl_resultplayers.id_command = gabl_command.id_command
    3. INNER JOIN gabl_games ON gabl_resultplayers.id_game = gabl_games.id_game
    4. INNER JOIN gabl_players ON gabl_resultplayers.id_players = gabl_players.id_players
    5. UNION ALL
    6. SELECT gabl_command.img_command, gabl_games.game, gabl_games.date, gabl_players.players,gabl_resultplayers.summa2 FROM gabl_resultplayers
    7. INNER JOIN gabl_command ON gabl_resultplayers.id_command = gabl_command.id_command
    8. INNER JOIN gabl_games ON gabl_resultplayers.id_game = gabl_games.id_game
    9. INNER JOIN gabl_players ON gabl_resultplayers.id_players = gabl_players.id_players
    10. UNION ALL
    11. SELECT gabl_command.img_command, gabl_games.game, gabl_games.date, gabl_players.players,gabl_resultplayers.summa3 FROM gabl_resultplayers
    12. INNER JOIN gabl_command ON gabl_resultplayers.id_command = gabl_command.id_command
    13. INNER JOIN gabl_games ON gabl_resultplayers.id_game = gabl_games.id_game
    14. INNER JOIN gabl_players ON gabl_resultplayers.id_players = gabl_players.id_players
    15. ORDER BY result DESC
    16. LIMIT 10
     
    TeslaFeo нравится это.