Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL] Wstawianie "liter" pomiędzy wyniki, <ul> w stylu spisu alfabetycznego
barat
post
Post #1





Grupa: Zarejestrowani
Postów: 183
Pomógł: 0
Dołączył: 19.05.2007

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


Witam.

Mam mały problem ... otoż pobieram sobie artykuły za pomocą zapytania:

  1. SELECT * FROM `artykuly` WHERE SUBSTR(`nazwa`, 1,1) BETWEEN 'a' AND 'd' ORDER BY `nazwa` ASC;


zakres a-d jest przykładowy ... (docelowo będą to A-D, E-H, I-L, M-P, Q-W, X-Z)

Wszystko działa ładnie, wybiera mi to co trzeba, mogę potem sobie zrobić z pobranych wierszy listę <ul>

W zasadzie mógłbym na tym poprzestać (w końcu mam listę z danym zakresem liter posortowaną alfabetycznie), ale wpadł mi do głowy pewien pomysł.

Aby lista była w stylu:

  1. <h3>A</h3>
  2. <ul>
  3. <li>Tytuły na A</li>
  4. ...
  5. </ul>
  6. <h3>B</h3>
  7. <ul>
  8. <li>Tytuły na B</li>
  9. ...
  10. </ul>
  11. <h3>C</h3>
  12. <ul>
  13. <li>Tytuły na C</li>
  14. ...
  15. </ul>
  16. <h3>D</h3>
  17. <ul>
  18. <li>Tytuły na D</li>
  19. ...
  20. </ul>


Czyli potrzebuję jakiegoś sposobu, by podczas wykonywania całej pętli "wyczuć" kiedy zaczyna się nowa litera i wtedy dodatkowo zrobić jakieś echo rodzaju:

  1. <?php
  2. echo '</ul><h3>'.$litera.'</h3><ul>'
  3. ?>


Robił ktoś coś takiego i ma gotowe rozwiązanie ? (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
barat
post
Post #2





Grupa: Zarejestrowani
Postów: 183
Pomógł: 0
Dołączył: 19.05.2007

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


To chyba raczej nie załatwi sprawy ... może jaśniej ...

Podanym wcześniej zapytaniem pobieram listę artykułów w określonym zakresie liter. W rezultacie dostaję obiekt z tymi artykułami (używam Kohanaphp)
Taki obiekt z artykułami przekazuję do widoku.
Powiedzmy, że w obiekcie mam następujące artykuły:
  1. Artykuł o niczym
  2. Artykuł przykładowy
  3. Bardzo przykładowy artykuł
  4. Bardzo artykułowy artykuł
  5. Ciekawy artykuł
  6. Ciekawszy artykuł
  7. Dalszy artykuł
  8. Dobry artykuł
W widoku je "odbieram"

  1. <ul>
  2. <?php foreach($artykuly as $row ):?>
  3.    <li><a href="artykul,<?php echo $row->id.','.url::title($row->nazwa, '-'); ?>.html" title="<?php echo html::specialchars($row->nazwa); ?>"><?= $row->nazwa ?></a></li>
  4. <?php endforeach; ?>
  5. </ul>


Będą to nazwy tych artykułów posortowane alfabetycznie (jako linki w liście ul). Kwestia jest taka, że jak zaczyna się literka B, chciałbym jeden jedyny raz wstrzyknąć </ul><h3>B</h3><ul> , następnie to samo z literą C oraz D ...

Czyli pewnie potrzebowałbym czegoś w rodzaju sprawdzenia pierwszego wystąpienia danej litery na początku nazwy, walnięcia tej literki i uaktywnienia dopiero jak będzie pierwsze wystąpienie kolejnej litery ...

Prymitywnym rozwiązaniem mojego problemu byłoby użycie 4 osobnych zapytań do bazy i zrobienie 4 osobnych foreach z odpowiednimi tytułami (A, B,C, D) ... ale oczywiście alfabet jest długi, poza tym "na sztywno" nie jest dobrze bo przecież na daną literę wcale nie musi być artykułu ...

Ten post edytował barat 18.05.2009, 11:21:11
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 2.10.2025 - 21:31