J'ai une question, ça marche bien. Dans la dernière étape, je souhaite qu'il trie toute la table DESC en fonction du nombre d'éléments dans la colonne "Liste d'éléments", mais cela ne fonctionne pas.
SELECT t8.username AS 'Username', GROUP_CONCAT(CASE WHEN t1.dup=1 AND t2.stat=0 AND t5.item_name='lamp' THEN item_id END ORDER BY item_id SEPARATOR ', ') `My Item List`, GROUP_CONCAT(CASE WHEN t2.dup=1 AND t1.stat=0 AND t5.item_name='lamp' THEN item_id END ORDER BY item_id SEPARATOR ', ') `Item List` FROM table1 t1 LEFT JOIN table3 t2 USING (item_id) JOIN table2 t5 ON t5.id = t2.user_id JOIN accounts t8 ON t8.id = t2.user_id WHERE t1.user_id = 23 AND t2.user_id <> 23 GROUP BY t2.user_id HAVING `Item List` is not null or `My Item List` is not null ORDER BY COUNT('Item List') DESC;
Je suis presque sûr d'avoir déjà froid, mais il me manque encore quelque chose.
item_id est stocké dans la table2 sous le nom int(11), puis transmis comme clé étrangère à la table3.
Voici le résultat que j'obtiens via COUNT :
Voici la longueur que j'ai obtenue :
Merci !
Si vous souhaitez le résultat de la liste des éléments par longueur, le résultat ressemble à ci-dessous
Ma liste d'éléments de liste Vide 6,7,8,9,10,12,13,14,15,16,17,20,371 Vide 20,21,22,23,24,25 Vide 6,7,8,9,10 Vide 131 Vide 131 1,4,5 vide
Essayez la requête suivante
Nous pouvons utiliser le nombre d'éléments dans le
group_concat
相同的条件的sum
来计算Item List
correspondant comme suit :C'est plus sûr que de simplement comparer la longueur des chaînes résultantes : par exemple, contenant un seul grand nombre comme
.'10000'
)的项目列表仍然比'1 长, 2'
qui contient deux élémentsSi nous devions utiliser des fonctions de chaîne, nous pourrions compter le nombre de virgules apparaissant dans une chaîne :
Remarque : deux utilisateurs peuvent avoir le même nombre d'éléments dans leurs listes, cela pourrait donc être une bonne idée d'ajouter un autre critère de tri pour briser l'égalité potentielle.