MySql et PHP: Comment trouver quelle ligne a un élément dans la principale place dans une liste CSV?

voix
1

Ce donc mon titre est tout aussi bizarre est un peu une question bizarre.

Ceci est une application de vote donc j'ai une table appelé les bulletins de vote qui a un deux domaines importants: nom d'utilisateur et au scrutin. Le bulletin de vote sur le terrain est un VARCHAR mais il stocke essentiellement une liste de 25 numéros de ids (1-200) comme CSVs. Par exemple, il pourrait être:

22,12,1,3,4,5,6,7,...

Et l'autre pourrait avoir

3,4,12,1,4,5,...

Etc.

Donc, étant donné un identifiant (disons 12) Je veux trouver quelle ligne (ou nom d'utilisateur) a cet identifiant dans la principale place. Ainsi, dans notre exemple ci-dessus, il serait le premier utilisateur parce qu'il a 12 dans la deuxième position tandis que le second utilisateur qu'il a dans la troisième position. Il est possible que plusieurs personnes peuvent avoir 12 dans la position de leader (par exemple si l'utilisateur # 3 et # 4 ont en place n ° 1) et il est possible que personne ne peut avoir classé 12.

Je dois aussi faire l'inverse (qui il a dans le pire endroit) mais je suppose que si je peux comprendre un problème, le reste est facile.

Je voudrais le faire en utilisant un nombre minimal de requêtes et déclarations, mais pour la vie de moi je ne peux pas voir comment.

La solution la plus simple que je pensais est de traverser tous les utilisateurs de la table et de garder trace de qui a une carte d'identité dans la principale place. Cela fonctionne bien pour moi maintenant, mais le nombre d'utilisateurs peut potentiellement augmenter de façon exponentielle.

L'autre idée que je devais faire était une requête comme celle-ci:

select `username` from `ballots` where `ballot` like '12,%'

et si cela renvoie les résultats que je suis fait parce que la position 1 est le premier endroit. Mais je ferais si cela a donné 0 résultats:

select `username` from `ballots` where `ballot` like '*,12,%'

où * est un caractère générique qui correspondra à un numéro et un seul numéro (contrairement au%). Mais je ne sais pas si cela peut effectivement être fait.

De toute façon ne quelqu'un a des suggestions sur la meilleure façon de le faire?

Merci

Créé 27/08/2009 à 04:26
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
2

Je ne suis pas sûr que je comprends bien ce que vous voulez faire - pour obtenir une liste des utilisateurs qui ont un nombre donné dans le champ de vote »ordonné par sa position dans ce domaine?

Si oui, vous devriez pouvoir utiliser MySQL FIND_IN_SET()fonction:

SELECT username, FIND_IN_SET(12, ballot) as position 
  FROM ballots
 WHERE FIND_IN_SET(12, ballot) > 0
 ORDER BY position

Ceci renverra toutes les lignes qui ont votre numéro (par exemple 12) quelque part au scrutin triés par la position que vous pouvez appliquer LIMITpour réduire le nombre de lignes retournées.

Créé 27/08/2009 à 05:01
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more