Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MYSQL - GROUP_CONCAT UND FIND_IN_SET mischen Werte/Reihenfolge?

würde so etwas funktionieren? Im Grunde sagen Sie, dass Sie nach den Feldwerten sortieren und sie wie '52', '46' usw. aussehen lassen.

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

BEARBEITEN:

Mein bevorzugter Weg, dies zu tun, besteht darin, eine Variable mit der Zeichenfolge zu erstellen. Sie ist einfacher zu lesen und Sie können auf diese Weise sicherstellen, dass sie die richtige Reihenfolge einhält.

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

dann wäre die Abfrage viel einfacher zu lesen...

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