Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ograniczanie liczby pobieranych znaków...
Forum PHP.pl > Forum > Bazy danych > MySQL
The Night Shadow
W jaki sposób pobrać z bazy np jedynie 50 znaków...? (w przypadku gdy chodzi o ukazanie części artykułu)
Neotion
Możesz je uciąć po pobraniu tzn
  1. <?
  2. $short = substr($str,0,50);
  3. ?>


lub też jak nie chcesz ucinać w połowie
  1. <?
  2. // Troszke trywialne...
  3. $pos = strchr(substr($str,0,50),' ');
  4. $str = substr($str,0,$pos).'...';
  5. ?>


o tym chyba wiedziałeś...
Pobrać z bazy jedynie 50 znaków to się chyba nie da...
NuLL
Cytat
Pobrać z bazy jedynie 50 znaków to się chyba nie da...

Nie gadaj bzur.
  1. SELECT LEFT(pole,50)
  2. FROM tabela

Pozatym jaki ma to zwiazek z php

Przenosze na MySQL
The Night Shadow
$ostatnipost = mysql_query("SELECT LEFT(tresc,50) FROM priv_tresc WHERE

dalej jest zmienna

$osttatnipost = mysql_fetch_assoc($ostatnipost);

Która ma być gdzieś tam wyświetlana np.: ".$osttatnipost['tresc']."

Nie wyświetla się nic
NuLL
Moze bys laskawie bbCode zaczal uzywac questionmark.gif

  1. SELECT LEFT(pole,50) AS krotkaTresc
  2. FROM tabela

Zrob sobie print_r dla tablicy wynikowej i wszystko zobaczysz.
The Night Shadow
Wystąpił jeszcze jeden mały problem:

  1. <?php
  2. $ostatnipost = mysql_query("SELECT LEFT(tresc,50) AS 'oost' FROM priv_tresc WHERE (((nadawca='$zkim' and odbiorca='".$_SESSION["login"]."') and (id_tematu=".$wiersz["id_tem"].")) or ((odbiorca='$zkim' and nadawca='".$_SESSION["login"]."') and (id_tematu=".$wiersz["id_tem"]."))) ORDER by 'data' DESC LIMIT 1");
  3. $osttatnipost = mysql_fetch_assoc($ostatnipost);
  4. $statnipost = mysql_query("SELECT LEFT(tresc,50) AS 'osta' FROM priv_tresc WHERE (((nadawca='$zkim' and odbiorca='".$_SESSION["login"]."') and (id_tematu=".$wiersz["id_tem"].")) or ((odbiorca='$zkim' and nadawca='".$_SESSION["login"]."') and (id_tematu=".$wiersz["id_tem"]."))) ORDER by 'data' LIMIT 1");
  5. $sttatnipost = mysql_fetch_assoc($statnipost);
  6. ?>


Są dwa zapytania ponieważ jedno czerpie ostatni post a drugie pierwszy napisany w temacie.

Teoretycznie zmienne ".$osttatnipost["oost"]." ".$sttatnipost["osta"]." powinny wyświetlać ostatni i pierwszy z postów. Wyświetlają dwukrotnie pierwszy. Dlaczego?
nospor
zapytania wydają się prawidlowe. moze tylko jeden rekord spelnia twoje warunki i dlatego jest on jednoczesnie pierwszy i ostatni ? winksmiley.jpg

ps: gratuluję nazewnictwa smile.gif
$ostatnipost - $statnipost
oost - osta
w ten sposob pewnego pieknego dnia zdasz sobie sprawę, ze nie wiesz co jest co winksmiley.jpg
a moze to jest twoj problem? przez pomylkę wyswietlasz ciaggle z tej samej zmiennej
The Night Shadow
Z pewnością nie jest to ta sama zmienna, a tego rodzaju zmienne

costam - ostam zdarzają sę w obrębie najwyżej 22- linii i wykorzystywane są nawjyeżej w 10-15 a stosuję je świaodmie, bo na dłuzsza metę wymyślanie za kązdym razm innej jest męczące... a co do rekordów to jest ich znacznie więcej bo blisko 50 w przypadku który osberwuję z czego pierwszy i ostatni powiny być wyświeltnae
nospor
spokojnie, nie denerwuj się smile.gif
Cytat
wymyślanie za kązdym razm innej jest męczące
eee, bez przesady: first.... - last....
I to jest męczące?

co do problemu. moze wpisz jawnie ze ma tam byc asc. bo teraz uzywasz domsylnego asc, i moze cos mu sie zle widzi... no nie wiem. bo zapytania wydają sie w porządku.
a na pewno jest ich 50? wyrzuc moze limita i zobacz ile jest ich naprawde
The Night Shadow
asc?
nospor
tu mnie rozlozyles...
kto ci pisal te zapytania?

w jednym z nich uzyles order by pole desc a wdrugim nie podales desc. domyslnie jest to wiec asc. daj wiec jawnie: order by pole asc

desc/asc - okreslają sortowanie (malejąco/rosnąco)
The Night Shadow
Skoro w jednym było DESC (malejąco) a w drugim domyślnie ASC to po co pisać ASC? Chodzi o to, że przecież jeden ma włąsnie sortować malejąco drugi rosnąco.

No dobrze więc zmodyfikowałem nieco kod, by byl bardziej przejżysty na coś takiego:

  1. <?php
  2. $ostatnipost = mysql_query("SELECT LEFT(tresc,50) AS 'last' FROM priv_tresc WHERE id_tematu='".$wiersz["id_tem"]."' ORDER by 'data' DESC LIMIT 1");
  3. $ostatnipostt = mysql_fetch_assoc($ostatnipost);
  4. $pierwszypost = mysql_query("SELECT LEFT(tresc,50) AS 'first' FROM priv_tresc WHERE id_tematu='".$wiersz["id_tem"]."' ORDER by 'data' ASC LIMIT 1");
  5. $pierwszypostt = mysql_fetch_assoc($pierwszypost);
  6. ?>


TO:

  1. <?php
  2. ".$ostatnipostt['nadawca']." //nadawca ostatniego postu (nie jest pobierany)
  3. ".$ostatnipostt['last']." // Treść ostatniego postu (zamiast niego pobierana jest treść pierwszego)
  4. ".$pierwszypostt['nadawca']." //Nadawca pierwszego postu (NIE JEST pobierany)
  5. ".$pierwszypostt['first']." //Treść pierwszego postu (JEST pobierana)
  6. ?>


Co robić?

DODATEK:

W momencie kiedy usuwam LEFT z wszystkim powiazaniami, wyswietla poprawnie... tak jakby LEFT powodował ignorowanie sortowania. Dlaczego?
nospor
znalazlem, znalazlem , huraaaa laugh.gif

a na powaznie: ORDER by 'data'
dopiero teraz to u Ciebie zauwazylem. w mysql gdy bierzesz cos w ciapki, traktowane jest to jako tekst. tak wiec ty nie sortujesz po polu data, ale po tekscie 'data', w wyniku czego te sortowanie jest do ... bani winksmiley.jpg

daj tak: ORDER by data
albo tak: ORDER by `data`

ps:
Cytat
a w drugim domyślnie ASC to po co pisać ASC?
a tak dla zabawy. czasami najglupsze sprawy mogą okazac sie przydatne, gdy nie wiesz co moze byc nie tak winksmiley.jpg w tym przypadku to bylo zbędne, ale zawsze mozna bylo sprowbowac, a nóż widelec smile.gif

ps2: aaa, i usun te ciapki z aliasow: as 'last', as 'first'. daj po prostu : as last, as first
The Night Shadow
Nospor JESTEŚ WIELKI! :- )

Tylko jedna kwestia... dlaczego nadal nie pobiera mi autorów postów?

I jeszcze jedno... czy da się coś zrobić, by nie ucinał wyrazów w połowie?

Zuważyłem, że kiedy usunąć LEFT pobierane są dane NADAWCY, wraz z całą treścią postu...
nospor
Cytat
dlaczego nadal nie pobiera mi autorów postów
a zastanow się przez chwilę winksmiley.jpg
  1. SELECT LEFT(tresc,50) AS last FROM...
czy widzisz gdzies w tym zapytaniu, bys żadąl by ci podano autora? ty tylko pytasz o treść winksmiley.jpg

Cytat
Zuważyłem, że kiedy usunąć LEFT pobierane są dane NADAWCY, wraz z całą treścią postu
eeee.... to ty nadawce trzymasz w tresci?

Cytat
czy da się coś zrobić, by nie ucinał wyrazów w połowie
Chyba mozna. trzeba by sie chyba wyrazeniami regularnymi pobawic (chyba smile.gif ), albo w php to skracac
The Night Shadow
  1. <?php
  2. SELECT LEFT(tresc,50) AS last FROM...
  3. ?>


Sądziłem, że to pobiera wszystkei kolumny, z uwzgldnieniem skracania tej jednej. No dobrze, kombinowałem z tym i nie bardzo wiem jakie sa wobec tego zasady pobierania innych kolum?
nospor
1) uzywaj odpowiedniego bbcode
2) no bez jaj... manuala nie widzial na oczy? winksmiley.jpg
  1. SELECT LEFT(tresc,50) AS last, innepole1, innepole2 FROM...

jest jeszcze * . ale o tym to se w manulau doczytaj smile.gif
SongoQ
Cytat
Chyba mozna. trzeba by sie chyba wyrazeniami regularnymi pobawic (chyba smile.gif ), albo w php to skracac


http://dev.mysql.com/doc/refman/5.1/en/regexp.html
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.