Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Lista w porządku alfabetycznym z tytułami
Forum PHP.pl > Forum > Przedszkole
boro11
Witam!
Zrobiłem sobie na stronie liste elementów w porządku alfabetycznym - nie trudnego zwykłe zapytanie. Potem dodałem do tego tytuł np.

A

Adrian
Ala
Andrzej

B

Borsuk
Bak
Bąk

C

Celina
Cykl

Tytuł to oczywiście litery a,b,c,d itd.

Mam to zrobione i działa, ale dosyć łopatologiczną metodą tj:

  1. $r=mysql_query("select link from ".$pref."site WHERE nazwa REGEXP '^a' AND `status` = 'SCAM' ORDER BY nazwa;");
  2. while($f=mysql_fetch_array($r))
  3. {
  4. $string = $f['link'];
  5. preg_match('@^(?:http://)?([^/]+)@i', $string, $matches);
  6. $host = $matches[1];
  7. preg_match('/[^.]+\.[^.]+$/', $host, $matches);
  8. echo $matches[0];
  9. echo'<br />';;
  10. }


I mam 24 takie pętle dlakażdej litery alfabetu oddzielnie. Da się to jakoś zamknąć w jednej pętli i zapytaniu?

Kod dalej służy do filtrowania danych (pozostawia tylko example.com) z całego adres.
Rafał Dudziński
Możesz np. pobrać jednym zapytaniem wszystkie wpisy z ORDER BY. W pętli wyświetlającej rekordy zrób zmienną tymczasową, do której zapisuj pierwszą literę ostatniego rekordu. Następnie porównuj ją z pierwszą literą aktualnego rekordu. Jeżeli są różne, to dodaj tytuł aktualnej litery.
boro11
Odnalazłem rozwiązane zaproponowane przez nospor
http://nospor.pl/grupowanie-wynikow.html
ale mam z nim problem. Wszystko działa oprócz tego, żę nie wyświetla się alfabetycznie. Bo ja mam w taeli link tj każdy zaczyna się od http/https czy pierwsza litera do zawsze H. Mam też kolumne z nazwą i chciałem posortować według niej, ale niestety nie dało to rezultatów:

  1. $sql = 'select link,nazwa from test_site '.
  2. 'order by nazwa asc'; //sortujemy po nazwie
  3. $res = mysql_query($sql) or die(mysql_error());
  4.  
  5. //najpierw pozyskamy niezbędne dane
  6. $cities = array();
  7. while ($row = mysql_fetch_array($res)){
  8. $string = $row['link'];
  9. preg_match('@^(?:http://)?([^/]+)@i', $string, $matches);
  10. $host = $matches[1];
  11. preg_match('/[^.]+\.[^.]+$/', $host, $matches);
  12.  
  13. $name = $matches[0];
  14.  
  15. //jeśli będziemy w bazie mieli miasta z nazwami zaczynającymi
  16. //się od polskich liter należy użyć modułu mb_string
  17. $firstLetter = strtoupper(substr($name,0,1));
  18.  
  19. //jeśli nie było jeszcze danej litery, to ją tworzymy
  20. if (!isset($cities[$firstLetter]))
  21. $cities[$firstLetter] = array();
  22.  
  23. //dodajemy kolejne miasta do danej litery
  24. $cities[$firstLetter][] = $name;
  25. }


  1. foreach ($cities as $letter => $_cities){ //petla, która leci po literach
  2. echo '<p class="scam">'.$letter.'</p>';
  3. foreach ($_cities as $city){ //pętla, która leci po miastach w literze
  4. echo $city.'<br />';
  5. }
  6. }



Edit: Problem z sortowaniem udało mi się rozwiązać miałem białe znaki przed 4 nazwami smile.gif

Ale mam kolejny problem. Po literze A występuję duża odlęgłość:



Ma ktoś pomysł czym to może być spowodowane? Przy innych literach/liczbach tego nie ma.

Edit2: Temat do zamknięcia smile.gif
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.