Autor Zpráva
peteo
Profil
Dobrý deň, večer, či ráno,

potreboval by som, prosím poradiť:
celá databáza má radenie podľa utf8_slovak_ci, ale bohužiaľ sa mi nedarí radiť správne, resp. ako chcem, písmená s mäkčeňmi a dĺžňami sa mi radia pred písmenka bez nich (bez háčků a čárek, aby mi rozumeli aj nie Slováci).
Ďakujem za pomoc.

Ukážka na http://co-to-je.sk/cotoje/dnes.php

kód:

include ("cotoje_conect.php");

 $vyber=mysql_query("
 SELECT * FROM a WHERE obsah LIKE '%".$dotaz."%' UNION   
 SELECT * FROM b WHERE obsah LIKE '%".$dotaz."%' UNION  
 SELECT * FROM c WHERE obsah LIKE '%".$dotaz."%' UNION  
 SELECT * FROM d WHERE obsah LIKE '%".$dotaz."%' UNION   
 SELECT * FROM e WHERE obsah LIKE '%".$dotaz."%' UNION  
 SELECT * FROM f WHERE obsah LIKE '%".$dotaz."%' UNION  
 SELECT * FROM g WHERE obsah LIKE '%".$dotaz."%' UNION   
 SELECT * FROM h WHERE obsah LIKE '%".$dotaz."%' UNION  
 SELECT * FROM ch WHERE obsah LIKE '%".$dotaz."%' UNION  
 SELECT * FROM i WHERE obsah LIKE '%".$dotaz."%' UNION   
 SELECT * FROM j WHERE obsah LIKE '%".$dotaz."%' UNION  
 SELECT * FROM k WHERE obsah LIKE '%".$dotaz."%' UNION  
 SELECT * FROM l WHERE obsah LIKE '%".$dotaz."%' UNION   
 SELECT * FROM m WHERE obsah LIKE '%".$dotaz."%' UNION  
 SELECT * FROM n WHERE obsah LIKE '%".$dotaz."%' UNION  
 SELECT * FROM o WHERE obsah LIKE '%".$dotaz."%' UNION   
 SELECT * FROM p WHERE obsah LIKE '%".$dotaz."%' UNION  
 SELECT * FROM q WHERE obsah LIKE '%".$dotaz."%' UNION  
 SELECT * FROM r WHERE obsah LIKE '%".$dotaz."%' UNION   
 SELECT * FROM s WHERE obsah LIKE '%".$dotaz."%' UNION  
 SELECT * FROM t WHERE obsah LIKE '%".$dotaz."%' UNION  
 SELECT * FROM u WHERE obsah LIKE '%".$dotaz."%' UNION   
 SELECT * FROM v WHERE obsah LIKE '%".$dotaz."%' UNION  
 SELECT * FROM w WHERE obsah LIKE '%".$dotaz."%' UNION  
 SELECT * FROM x WHERE obsah LIKE '%".$dotaz."%' UNION   
 SELECT * FROM y WHERE obsah LIKE '%".$dotaz."%' UNION
 SELECT * FROM z WHERE obsah LIKE '%".$dotaz."%' UNION  
 SELECT * FROM znak WHERE obsah LIKE '%".$dotaz."%' UNION
 SELECT * FROM cislo WHERE obsah LIKE '%".$dotaz."%' UNION 
 SELECT * FROM os WHERE obsah LIKE '%".$dotaz."%' ORDER BY book,meno");
    while ($row = mysql_fetch_array($vyber)) {
       $text="<hr><span>".$row['meno']."</span>".$row['obsah'];
       include ("pict.php");//opbrazky
       echo "<div class='zoscri'><h1><span>".$text."</div>";  
    }

ORDER BY book,meno - radenie podľa písmena (neviditeľné, sú to tabuľky medzi FROM a WHERE, a stĺpca meno - vo výsledku (viď ukážka) to, čo je červenou farbou.

stránky sú funkčné okrem vyhľadávania.
Joker
Profil
peteo:
Uf, třicet úplně stejných tabulek?! Proč to nedáte do jedné?

bohužiaľ sa mi nedarí radiť správne, resp. ako chcem, písmená s mäkčeňmi a dĺžňami sa mi radia pred písmenka bez nich
Ve slovenské (i české) abecedě jsou písmena s diakritikou za písmeny bez diakritiky, takže správné abecední řazení je, aby písmena s diakritikou byla později.
Jak dosáhnout aby byla dříve, to nevím, možná jestli existuje nějaká abeceda, kde písmena s diakritikou jsou první? Ovšem zas by nevypadala jako slovenská abeceda. Tak nevím.
peteo
Profil
Joker:
Uf, třicet úplně stejných tabulek?! Proč to nedáte do jedné?

Pretože v tých tabuľkách je dohromady 130.000 záznamov a nepodarilo sa mi urobiť skript, ktorý by dokázal zo zdrojových súborov do 30 sekúnd urobiť jednu tabuľku. I teraz najväčšiu tabuľku robí cca 15 sekúnd.
Urobil som skript, ktorý tie tabuľky tvorí automaticky zo zdrojových textových súborov, ručne sa mi to ta fakt nechce hádzať ;)

Ve slovenské (i české) abecedě jsou písmena s diakritikou za písmeny bez diakritiky, takže správné abecední řazení je, aby písmena s diakritikou byla později.

No to ja viem, povodne ich mám správne (stránky bežiace bez mysql: http://co-to-je.sk/dnes.php), iba v databáze mi to radí takto šialene.
A s tým práve neviem pohnúť, aby to radilo správne.
Sir Tom
Profil
peteo:
Nejdříve to dej do jedné tabulky. Třeba si napiš skript na postupné přidávání dat do tabulky, nebo skript, který spojí těchto 30 do jedné. Možná to bude trvat delší dobu, ale věz, že v budoucnu to bude velmi výhodné. Teprve poté lze řešit abecední řazení.
Joker
Profil
peteo:
nepodarilo sa mi urobiť skript, ktorý by dokázal zo zdrojových súborov do 30 sekúnd urobiť jednu tabuľku.
A je problém to rozdělit na více částí?
Ostatně teď když to v databázi už je stačí prostě data přesunout do jedné tabulky.

ad řazení: Joaha, já to předtím špatně pochopil.
Až to bude v té jedné tabulce, mělo by stačit prostě použít řazení pro slovenštinu (utf8_slovak_ci, případně pro dané kódování, pokud to není v UTF-8)
shaggy
Profil
peteo:
nepodarilo sa mi urobiť skript, ktorý by dokázal zo zdrojových súborov do 30 sekúnd urobiť jednu tabuľku
Keď sa ti podarilo urobiť skript, ktorý zo zdrojových súborov urobil viac tabuliek, je problém ho upraviť tak, aby to uložil do jednej?
Ty si najprv vytvor tabuľku (nerob to v tom istom skripte, ako máš ukladanie dát) a potom si v dávkach ulož dáta.
Alebo si zmeň max. čas na beh skriptu.
peteo
Profil
OK, databáza prekopaná do jednej tabuľky, výsledný kód výpisu dole.
Bohužiaľ, radenie je zlé, opäť sú hášiky a čiarky pred normálnymi písmenami, viď ukážka v [#1] (už s novou datábazou a týmto kódom).

všetky zotriedenia sú podľa utf_8_slovak_ci, čo by malo teda radiť správne, ale neradí.
hm.
Pomohlo by i, keby na to niekto na to prišiel, nech tam nemusím dávať nejaké šialené podmienky na radenie.
Potrebujem aby to nebolo case sensitiv, ale aby to rešpektovalo háčky a čiarky.

include ("cotoje_conect.php");

 $vyber=mysql_query("SELECT * FROM meno WHERE obsah LIKE '%".$dotaz."%' ORDER BY book,meno");
    while ($row = mysql_fetch_array($vyber)) {
       $text="<hr><span>".$row['meno']."</span>".$row['obsah'];
        $text = str_replace($dotaz,$zvy3,$text); //zvýraznenie textu
        $text = str_replace($zvy4,$zvy04,$text); //zvýraznenie textu
       include ("pict.php");//opbrazky
       echo "<div class='zoscri'><h1><span>".$text."</div>";  
    }

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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