sql >> Database teknologi >  >> RDS >> Mysql

MYSQL - GROUP_CONCAT OG FIND_IN_SET blander værdier/rækkefølge?

ville sådan noget virke? dybest set siger du rækkefølge efter feltværdierne og får dem til at se ud som '52', '46',... osv.

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

EDIT:

min foretrukne måde at gøre dette på er at lave en variabel, der har strengen.. den er nemmere at læse, og du kan sikre, at den gør den rigtige rækkefølge på denne måde.

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

så ville forespørgslen være meget nemmere at læse...

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. SQL Oracle-optællingsklynger

  2. Valg af en del af et felt med et regex

  3. Hvordan fungerer det at hente data fra SQL Server til SqlDataReader?

  4. Slet fra to tabeller i én forespørgsel