Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] Pobranie fragmentu rekordu
Forum PHP.pl > Forum > Bazy danych > MySQL
piotrek24
Bynajmniej nie chodzi o pobranie samego fragmentu rekordu, ale o wyświetlenie (bądź nie) opcji "czytaj więcej".

Założenia są takie:
  • jak wiadomość jest dłuższa od 160 znaków, pobieramy ich około 140 i dodajemy opcje "czytaj więcej", gdzie po kliknięciu pobieramy na osobnej stronie pełną wiadomość.
  • jak wiadomość jest krótsza od 160 znaków pobieramy go w całości nie umieszczając obok niego opcji "czytaj więcej".
I teraz kod:

  1. <?php
  2. $zapytanie = mysql_query("SELECT 
  3. IF(LENGTH(wiadomosc_tresc)>160, SUBSTRING(wiadomosc_tresc, 1, LOCATE(' ', wiadomosc_tresc, 140)), 0) as wiadomosc_skrocona, 
  4. IF(LENGTH(wiadomosc_tresc)<160, wiadomosc_tresc, 0) as wiadomosc_pelna 
  5. FROM wiadomosci") or die(mysql_error());
  6. if(mysql_num_rows($zapytanie) > 0)
  7. {
  8. while($dane = mysql_fetch_assoc($zapytanie))
  9. {
  10. // tutaj wyświetlamy treść wiadomości
  11. if($dane['wiadomosc_pelna'] == 0)
  12. {
  13. // tutaj wyświetlamy opcje "czytaj więcej"
  14. }
  15. elseif($dane['wiadomosc_skrocona'] == 0)
  16. {
  17. // tutaj nie wyświetlamy opcji "czytaj więcej"
  18. }
  19. }
  20. }
  21. ?>


Wykorzystałem w tym przykładzie dwa warunki IF i chciałem zapytać czy jest to "optymalnie" zrobione?. Może ma ktoś jakiś inny lepszy pomysł rozwiązania takiego problemu?
kris2
generalnie to co probujesz zrobic jest dziwne. chcesz oszczedzic transfer miedzy php a bazą danych?
ja bym zrobił to na poziomie php, masz wiecej mozliwosci manewru. a server sql i php sa pewnie na tej samej maszynie wiec jezeli tresc nie jest ogromna to niczego nie tracisz.
slepiec
ja mam tendencję do umieszczania długości tekstu w bazie danych.
Druga rzecz : a zrobić tak :
  1. SELECT IF(LENGTH(wiadomosc_tresc)>160,0,1) AS czyPelna,
  2. IF(LENGTH(wiadomosc_tresc)>160, SUBSTRING(wiadomosc_tresc, 1, LOCATE(' ', wiadomosc_tresc, 140)), wiadomosc_tresc) AS wiadomosc
  3. FROM wiadomosci;


ale fakt w php można by to zrobić lepiej, choćby by kończyło ucinanie tekstu na końcu słowa a nie w jego środku.
piotrek24
@kris2
Więc tak, chciałem zaoszczędzić na transferze... niby nic, ale czemu nie skoro można... rolleyes.gif. php i mysql chyba nie są na tym samym serwerze bo nie łączę się przez localhost.

@slepiec
Dzięki za poprawę kodu. Tak też może być, nawet chyba jest lepiej smile.gif.

Cytat
ale fakt w php można by to zrobić lepiej, choćby by kończyło ucinanie tekstu na końcu słowa a nie w jego środku.

Ale w tym kodzie zostało to już uwzględnione!. Po 140 znaku szukana jest spacja i tam ucinany jest tekst. Więc otrzymujemy tekst obcięty na końcu słowa.

Newsy na stronie którą robię będą miały sporą długość rzędu 1500-2000 znaków i stąd moje zainteresowanie ich obcięciem do 300-500 znaków i jakimś sensownym wyświetleniu na stronie głównej.
kris2
a może zamiast wrzucac skróconego artykulu automatycznie wrzucic do bazy intro artykulu pisane oddzielnie. to chyba bedzie sensowniejsze od strony interfejsowej.
slepiec
sorry piotrek, to faktycznie to znajduję - ja w stringach się bawię.
Myśl krisa jest wielce zacna.
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.