Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL] Sotrowanie wyników
coder()
post
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 3.05.2007

Ostrzeżenie: (0%)
-----


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??
Go to the top of the page
+Quote Post
kicaj
post
Post #2





Grupa: Zarejestrowani
Postów: 1 640
Pomógł: 28
Dołączył: 13.02.2003
Skąd: Międzyrzecz/Poznań

Ostrzeżenie: (0%)
-----


Otoz taki temat juz byl... poszukaj uwaznie!

http://forum.php.pl/index.php?showtopic=116


--------------------
PHP Developer

"Nadmiar wiedzy jest równie szkodliwy jak jej brak" Émile Zola
Go to the top of the page
+Quote Post
coder()
post
Post #3





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 3.05.2007

Ostrzeżenie: (0%)
-----


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.

Ten post edytował coder() 13.01.2008, 08:46:29
Go to the top of the page
+Quote Post
nevt
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

Ostrzeżenie: (0%)
-----


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...


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 15:21