Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] stronicowanie inaczej...
Forum PHP.pl > Forum > PHP
AcidBurnt
witam!

na wstepie zaznaczam ze przeszukajem forum pod haslem: stronicowanie ale nie znalazlem odpowiedzi na moje question...

potrzebuje zrobic sorticowanie textu wybrenego z mysql'a, tylko ze nie tak ze wybiera sie przez LIMIT tylko z mysql wybieramy 1 pole z tekstem, i w nim sa powiedzmy znaczniki <!page> i on stronicuje poprzez ten znaczinki, jak w tekscie beda powiedzmy 3 takie znaczniki to zrobie 3 strony...

[php:1:2e0c9c7eef]<?php
tekst tekst tekst tekst tekst tekst
<!page>
test1 test1 test1 test1 test1 test1
<!page>
tekst2tekst2tekst2tekst2tekst2tekst2
?>[/php:1:2e0c9c7eef]

i powiedzmyze bedzie w bazie taki tekst to na 1 stronie bedzie:

tekst tekst tekst tekst tekst tekst

na 2-iej

test1 test1 test1 test1 test1 test1

a na trzeciej:

tekst2tekst2tekst2tekst2tekst2tekst2...

pozdro
menic
Mozesz np. pobierać text od <!page> do <!page> poprzez same mysql
AcidBurnt
menic mozesz mi podac przykład takiego zapytania?

nie znam niestety mySQL dobrze, narazie podstawy SELECT DELETE i UPDATE... w podstawowych sprawach... no umiem jeszcze jako tako laczyc zapytania do 2 i wiecej tabel smile.gif
radziel
A przypadkiem nie najprościej :
[php:1:8b0eadb3ea]<?php
$pages= explode('<!page>',$zmienna_z_artem);
?>[/php:1:8b0eadb3ea]
i potem
[php:1:8b0eadb3ea]<?php
echo $pages[0]; // pierwsza strona
echo $pages[1]; // druga strona
echo $pages[2]; // trzecia strona

?>[/php:1:8b0eadb3ea]
menic
@radziel: To jest bez sensu. Nie po to pracuje sie na SQLu, zeby używać tak prymitywnych sposobów jakie stosuje sie w przypadku płaskich baz danych. A co do twojego problemu. dokladnie tez nie wiem jak to powinno wyglądać, bo jeszcze nie zdązyłem tego użyć, ale zainteresuj sie funkcjami http://www.mysql.com/doc/en/String_functions.html winksmiley.jpg
spenalzo
Hmm może tak?
[sql:1:2ac4256812]SELECT REPLACE(SUBSTRING_INDEX(pole_z_trescia,'<!page>','".$numer_strony."'), SUBSTRING_INDEX(pole_z_trescia,'<!page>','".($numer_strony-1)."'),'') AS tresc FROM tabela WHERE costam='costam' [/sql:1:2ac4256812]
gdzie $numer_strony musi zaczynać się od 1.

Oczywiście zamień pole_z_trescia na nazwe swojego pola, gdzie przechopwujesz tą treść. W wyniku dostaniesz treść wybranej strony - potem usuń z niej znacznik <!page> bo chyba zostanie w treści (o ile sie nie myle).
AcidBurnt
Cytat
@radziel: To jest bez sensu. Nie po to pracuje sie na SQLu, zeby używać tak prymitywnych sposobów jakie stosuje sie w przypadku płaskich baz danych. A co do twojego problemu. dokladnie tez nie wiem jak to powinno wyglądać, bo jeszcze nie zdązyłem tego użyć, ale zainteresuj sie funkcjami http://www.mysql.com/doc/en/String_functions.html winksmiley.jpg



a nie wiesz gdzie to znajde po polsku?

bo angol u mnie tak sredniq
spenalzo
A to co podałem nie działa?

Link do manuala MySQL (częsciowo) po polsku znajdziesz na dole tej strony.
AcidBurnt
Cytat
A to co podałem nie działa?

Link do manuala MySQL (częsciowo) po polsku znajdziesz na dole tej strony.


nie wiem cyz nie dziala jeszcze nie mialem okazi sprawdzic, ale ogolnie to nie lubie korzystac z czego czego za bardzo nie rozumiem... dla tego chcialbym wiedzec z czym to sie je...
spenalzo
OK, więc po kolei:

[sql:1:14a009f283]SUBSTRING_INDEX(pole_z_trescia,'<!page>','".$numer_strony."')[/sql:1:14a009f283]
Zwróci ciąg od początku do kolejnego wystąpienia ciągu '<!page>' określonego przez $numer_strony - dlatego $numer_strony musi być większy lub równy 1. Niestety jeżeli liczba ta będzie większa od 1 (np. 5) to funkcja zwróci wszystko do piątego wystąpienia ciągu '<!page>'. Ponieważ nam chodzi jedynie o to co się znajduje pomiędzy 4 a 5 znacznikiem musimy użyć poniższej funckji:

[sql:1:14a009f283]SUBSTRING_INDEX(pole_z_trescia,'<!page>','".($numer_strony-1)."')[/sql:1:14a009f283]
Zwróci ciąg od początku tekstu do jego n-1 wystąpienia w tekście - gdzie n to numer aktualnej strony. Jeżeli numer strony jest równy 1, to ta funkcja nic nie zwróci.

Wrzucamy to wszystko do REPLACE(...) i usuwamy z pierwszego ciągu niepotrzebne nam strony poprzez drugą funkcję SUBSTRING_INDEX i otrzzymujemy tylko żądaną stronę.

Może teraz coś Ci się rozjaśni:
[sql:1:14a009f283]SELECT @biezaca_strona:=SUBSTRING_INDEX(pole_z_trescia,'<!page>','".$numer_strony."'), @poprzednia_strona:=SUBSTRING_INDEX(pole_z_trescia,'<!page>','".($numer_strony-1)."'),
REPLACE(@biezaca_strona,@poprzednia_strona,'') AS tresc FROM tabela WHERE costam='costam' [/sql:1:14a009f283]
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.