Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Sotrowanie wyników
Forum PHP.pl > Forum > PHP
coder()
Witam.
Wiem zę większosć z Was ma w tym momencie, po przeczytaniu tematu, odzielenia odpowiedzi w stylu "To już było wiele razy użyj opcji szukaj".

Jednak ja nie znalazłem odpowiedzi na mój problem.
Więc przejdę do rzeczy:

Mam skrypt który pobiera pojedyńcze litery z bazy danych i robi z nich linki (coś jak słownik że wybiera się literę po czym wyświetlana jest cała lista wyrazóe na ta literę).

Pobrane pojedyńcze litery są sortowane wg kolejności alfabetycznej. Niestety wszystko jest dobrze dokóki nie pojawią się słowa takie jak "łoś", "żeby" itp. które mają na początku polski znak. A mianowicie wyświetlana jest tylko litera Ł i jest ona na samym końcu alfabetycznego uszeregowania a nie po literze L jak powinno być. Litery Ś Ż Ą wogóle nie są wyświetlane.
oto skrypt który mi pobiera, sortuje i wyświetla wyniki:
  1. <?php
  2. $zapytanie = "SELECT DISTINCT firstletter FROM phrases ORDER BY firstletter ASC";
  3. $query = mysql_query($zapytanie) or die(mysql_error());
  4.  
  5. while($row = mysql_fetch_assoc($query)){
  6. echo '<a href="index.php?ms=' . $_GET[ms] . '&c=1&l=' . $row[firstletter] . '">' . mb_strtoupper($row[firstletter], "UTF-8") . '</a> ';
  7. }
  8. ?>


Teraz jeśli chodzi o samo wyświetlanie wyrazów po kliknięciu na link. Wszystkie wyrazy takie jak "śruba" i "żeby" są w kategoriach gdzie nie powinny być czyli zamiast w Ś i Ż umieszczone są w S i Z.
A oto skrypt wyświetlający wyniki po kliknięciu na literę:
  1. <?php
  2. function show($litera){
  3. $zapytanie = "SELECT * FROM phrases WHERE firstletter='$litera' ORDER BY firstletter ASC";
  4.  
  5. $query = mysql_query($zapytanie) or die(mysql_error());
  6. while($row = mysql_fetch_array($query)){
  7. if ($row[used] == 1) {
  8. echo '<font color="red"><b>' . $row[phrase] . '</b></font><br />';
  9. } else {
  10. echo '<font color="green"><b>' . $row[phrase] . '</b></font><br />';
  11. }
  12. }
  13. }
  14. ?>


Czy jest jakis sposób na te 2 powyższe problemy??
kicaj
Otoz taki temat juz byl... poszukaj uwaznie!

http://forum.php.pl/index.php?showtopic=116
coder()
Zgadza się... temat podobny był. Niestety moje wyniki w bazie danych muszą pozostać niezmienione ponieważ na tej tabeli jest oparte kilkka innych skryptów które przezd dodaniem, pobraniem itp. sprawdzają czy dane słowo znajduje się w bazie (z polskimi znakami). Nie ekonomicznym było by dodawanie do każdego skryptu dodatkowych funkcji które zmienią mi polskie litery na zwykłe lub tez tworzenie dodatkowej kolumny z bazie danych. Sprawa jeszcze by przeszła w przypadku bazy danych z małą ilością wierszy. U mnie jest ich około 4 mln więc przy zapytaniu dla chociażby 1% wyników z tego znacznie obciążyło by serwer a co za tym idzie zwiększyło by czas oczekiwania na wynik skryptu.

Czy jest jakiś inny sposób który pozwoli mi na właściwe uszeregowanie wyników bez ingerowania w bazę danych??

________

A co do drugiego problemu to czy jest jakiś sposób na rozróżnianie przez skrypt liter S i Ś itp??

Zapomniałem dodać ze używam kodowania UTF-8 wiec częsć rozwiązań z tamtego tematu nie przejdzie u mnie.
nevt
pierwszy problem:
  1. SELECT DISTINCT firstletter FROM phrases ORDER BY firstletter COLLATE utf8_polish_ci ASC;

drugi problem:
  1. SELECT * FROM phrases WHERE firstletter='$litera' ORDER BY firstletter COLLATE utf8_polish_ci ASC";

powodzenia...
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.