Autor Zpráva
danhill
Profil
Ahoj,
potřeboval bych pomoci s dotazem.

Mám tabulku `finds`
Z této mě zajímá sloupec 'code'
V tabulce je přes 70 000 řádků a hodnoty 'code' se opakují.
Tahám si z ní pomocí dotazu :
SELECT `code`, COUNT(code) AS pocet FROM finds GROUP BY code HAVING pocet > 1 ORDER BY `pocet` DESC LIMIT 10

10 nejvíce opakujících se hodnot 'code'.
Tohle chodí bez problémů.

Ale pak mám druhou tabulku `final` kde je taky sloupec 'code', ale v této tabulce je 'code' unikátní hodnota.
Ke každému 'code' je přiřazena v druhé sloupci této tabulky hodnota 'name'
Tato druhá tabulka `final` obsahuje cca 30000 řádků různých hodnot 'code'.

A já potřebuji JOIN do této druhé tabulky, abych každému z 10 'code' z prvního výsledku přiřadil 'name' z druhé tabulky.
Pokusil jsem se to udělat dotazem:
SELECT a.code,b.name, COUNT(a.code) AS pocet FROM finds a INNER JOIN final b ON a.code = b.code GROUP BY a.code HAVING pocet > 1 ORDER BY `pocet` DESC LIMIT 10

Což sice správný výsledek vyhodí:
'code' 'name' 'pocet'
Ale dotaz je špatně sestavený,protože nevyčítá jen těch 10 code co mě zajímá,ale vyhledává name pro každý jeden code a to způsobí,že takový dotaz trvá i 100s
Takže musí být jistě napsaný jinak.
Napadá mě třeba funkce UNION,ale nevím, vy možná vědět budete ...
Moc děkuji.
TomášK.
Profil *
SELECT t.code, t.pocet, final.name
  FROM (
    SELECT `code`, COUNT(*) AS pocet FROM finds GROUP BY code HAVING pocet > 1 ORDER BY `pocet` DESC LIMIT 10[/
  ) t JOIN final USING(code) 
TomášK
Profil
Koukám ještě na ten čas - 100s. Původně jsem četl 100 ms a zdálo se mi to hodně, ale ne tak, abych to zmínil. 100 s znamená, že se nepoužívají indexy, jsou tam nějaké? MySQL je pokud si dobře vybavuju definuje samo při definici cizích klíčů, jsou ty definované?
danhill
Profil
No tenhle Tvůj dotaz je teda už mnohem rychlejší. Vypíše to za 100ms.
Je pravda, že po dotazu napíše phpMyAdmin hlášku: "Aktuální výběr neobsahuje unikátní klíč. Editování v mřížce, zaškrtávací políčka nebo odkazy na editaci a mazání proto nejsou k dispozici."
Ale abych se přiznal, nevím co znamenají indexy a definice cizích klíčů.
Jediné co tam mám nastavené, tak v obou tabulkách jesou definovány dva klíče. Jeden je vždy PRIMARY a v něm je ID - to je AI id řádku v tabulce. Druhý klíč v tabulce finds jsem přidával jako INDEX na pole code a user. A druhý klíč v tabulce final je také INDEX na pole archive a code. Ale tohle je kvůli jiným dotazům z jiných funcí. Trochu se bojím do toho vrtat,protože těm klíčům fakt nerozumím, tak aby se mi nezhroutily jiné funkce na webu.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: