Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Lista w porządku alfabetycznym z tytułami
boro11
post
Post #1





Grupa: Zarejestrowani
Postów: 283
Pomógł: 11
Dołączył: 9.07.2010
Skąd: Warszawa

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


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.

Ten post edytował boro11 22.11.2013, 16:27:32
Go to the top of the page
+Quote Post
Rafał Dudziński
post
Post #2





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 30.04.2007
Skąd: Częstochowa

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


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.

Ten post edytował Rafał Dudziński 22.11.2013, 16:32:09
Go to the top of the page
+Quote Post
boro11
post
Post #3





Grupa: Zarejestrowani
Postów: 283
Pomógł: 11
Dołączył: 9.07.2010
Skąd: Warszawa

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


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

Ten post edytował boro11 22.11.2013, 16:56:36
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: 21.08.2025 - 00:34