sql >> Databáze >  >> RDS >> Mysql

MYSQL - GROUP_CONCAT A FIND_IN_SET směšují hodnoty/pořadí?

fungovalo by něco takového? v podstatě říkáte pořadí podle hodnot polí a děláte je jako '52', '46',... atd.

SELECT 
    GROUP_CONCAT(DISTINCT options.option_name 
                 ORDER BY FIELD( options.id, 
                                 concat('"', 
                                        replace(selected, ',', '","'),
                                        '"') 
                               ) 
                 SEPARATOR ','
                ) AS selected,
    user_login.firstname, user_login.lastname,
    event.event_title
FROM options, user_login, event, votes, questions
WHERE event.id = ? AND questions.Event_id = event.id 
  AND votes.user_id = user_login.id AND votes.question_id = questions.id 
  AND FIND_IN_SET(options.id, selected)
GROUP BY user_login.id
ORDER BY user_login.class

UPRAVIT:

můj preferovaný způsob, jak to udělat, je vytvořit proměnnou, která má řetězec.. je snazší číst a můžete se ujistit, že tímto způsobem udělá správné pořadí..

SET @order_field := (
    SELECT 
        group_concat(
            CONCAT('"', replace(selected, ',', '","'), '"')
        ) 
    FROM votes);

pak by byl dotaz mnohem snáze čitelný...

SELECT 
    GROUP_CONCAT(DISTINCT options.option_name 
                 ORDER BY FIELD( options.id, @order_field) 
                 SEPARATOR ','
                ) AS selected,
    user_login.firstname, user_login.lastname,
    event.event_title
FROM options, user_login, event, votes, questions
WHERE event.id = ? AND questions.Event_id = event.id 
  AND votes.user_id = user_login.id AND votes.question_id = questions.id 
  AND FIND_IN_SET(options.id, selected)
GROUP BY user_login.id
ORDER BY user_login.class



  1. Flask :sqlalchemy.exc.ProgrammingError:(psycopg2.ProgrammingError) vztah uživatelé neexistuje

  2. Jak vypnu autocommit pro klienta MySQL?

  3. Jak zjistit počet dní mezi dvěma daty v MySQL

  4. Jak provést tichou instalaci mysql v inno setup?