MySQL a PHP: Jak zjistit, který řádek obsahuje položku v předním místě v seznamu ve formátu CSV?

hlasů
1

To je trochu podivné otázky, takže můj název je stejně divné.

Jedná se o hlasovací aplikace, takže mám tabulku s názvem hlasovací lístky, které má dvě důležité oblasti: uživatelské jméno a hlasování. Pole hlasování je VARCHAR, ale to v podstatě ukládá seznam 25 id (čísla od 1200) ve formátu CSV. Například by mohlo být:

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

A ještě jeden může mít

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

A tak dále.

Takže vzhledem k tomu, id (řekněme 12) Chci zjistit, který řádek (nebo uživatelské jméno) má toto ID v předním místě. Takže v našem příkladu výše by to být první uživatel, protože má 12 ve druhé poloze, zatímco druhý uživatel ho na třetí pozici. Je možné, že více lidí může mít 12 ve vedoucí pozici (například pokud uživatel # 3 a # 4 mít v místě 1 #) a je možné, že nikdo nemůže mít zařadil 12.

Také je potřeba udělat pravý opak (kdo to má v nejhorším místě), ale já zjistit, jestli můžu přijít na jeden problém zbytek je snadný.

Chtěl bych to udělat pomocí minimální počet dotazů a výkazů, ale pro život mě nemůže vidět, jak.

Nejjednodušším řešením jsem myslel, ze je projít všechny uživatele v tabulce a sledovat, kdo má id v předním místě. To bude fungovat dobře pro mě teď ale počet uživatelů může potenciálně zvýšit exponenciálně.

Druhý nápad jsem měl, byl k tomu dotazu takto:

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

a pokud to vrátí výsledky jsem udělal, protože poloha 1 je předním místě. Ale pokud to nalezeno 0 výsledků bych udělal:

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

kde * je zástupný znak, který se bude shodovat jedno číslo a jedno číslo pouze (na rozdíl od%). Ale já nevím, jestli to může být skutečně udělat.

V každém případě má někdo nějaké návrhy, jak nejlépe to udělat?

dík

Položena 27/08/2009 v 04:26
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
2

Nejsem si jistý, správně to, co chcete dělat, jsem pochopil - získat seznam uživatelů, kteří mají dané číslo v poli ‚volební‘ objednal jeho postavení v této oblasti?

Pokud ano, měli byste být schopni používat MySQL FIND_IN_SET()funkce:

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

To vrátí všechny řádky, které mají své číslo (např 12) někde v hlasování seřazeny podle polohy můžete použít LIMITke snížení počtu vrácených řádků.

Odpovězeno 27/08/2009 v 05:01
zdroj uživatelem

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