ugrás a tartalomhoz

Bizonyos számú karakter lekérése egy mezőből

geforce9600gt · 2014. Jan. 5. (V), 00.38
Hello

Van egy tábla, abban egy leírás mező. A mező típusa longtext.

Lehet írni olyan lekérést, hogy a leírás mező tartalmából csak 100 karaktert kérjen le,e ne pedig az egész szöveget ami benne van?
 
1

Ne haragudj, de hol kerested?

bamegakapa · 2014. Jan. 5. (V), 00.46
Ne haragudj, de hol kerested?

(egyébként lehet)
2

Próbáljuk másképp...

ecrazor · 2014. Jan. 5. (V), 03.02
A lekérdezés lekéri a teljes mezőt, de mi kiírásnál csak megadott karakterig jelenítjük meg. Erre jó a substr() függvény.

Például:

<?php
// Levagas hasznalata: substr(valtozo, ettol, eddig);
$rest = substr("abcdef", 0, -1);  // eredmény: "abcde"
$rest = substr("abcdef", 2, -1);  // eredmény: "cde"
$rest = substr("abcdef", 4, -4);  // eredmény: false (boolean)
$rest = substr("abcdef", -3, -1); // eredmény:  "de"
$rest = substr("abcdef", 0, 3);   // eredmény:  "abc"
?>
A Te esetedben:

<?php
$record = "tetelezzuk fel, hogy ez most szaz karakternel is hosszabb...";
$record = substr($record, 0, 100); // 0-tol 100-ig jelenitunk meg karaktereket.
?>
Bővebben (angol nyelven): http://hu1.php.net/substr

Más: Ha a karakterek száma fixen maximum száz lehet, akkor hatékonyabb ha már eleve úgy kerül be az adatbázisba.

Viszont, ha tartalom levágást akarsz csinálni (bevezető, teljes tartalom), akkor azt általában egy <!-- break --> ill. oldaltörés jelzi.

Gyors példa:


$content = <<<TEXT
Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
Nunc pharetra augue ut rutrum sodales. Aliquam erat 
volutpat. Nam egestas ac nisi sit amet consectetur. 
<!-- break -->
Mauris diam libero, facilisis vel laoreet eget, porta 
feugiat est.
TEXT;

$content = explode("<!-- break -->", $content);
   // tartalom kette vagasa
$content_summary = $content[0]; 
   // break elotti resz
$content_body = $content[1]; 
   // break utani resz
$content_full = $content_summary . $content_body; 
   // teljes tartalom

Az utóbbi példa szabadabb kezet ad, mivel Te döntheted el mikor akarsz levágást. Ha jól tippelem, az utóbbi megoldás lesz a befutó. :)

Daniel.
8

Pazarlás

Pepita · 2014. Jan. 5. (V), 16.48
A lekérdezés lekéri a teljes mezőt, de mi kiírásnál csak megadott karakterig jelenítjük meg.

Mivel a LONGTEXT 4 GB (!) is lehet, méghozzá rekordonként, bődületes erőforráspazarlás 100 karakterért lekérni mindet. Ha már trükközni akarsz pl. nem <!-- break -->-el, hanem szóvégi levágással, akkor használd előbb pkadam (3-as komment) megoldását pl. 200 karakterre, utána játssz vele a PHP-val.

A másik, hogy mivel valószínű (igen ajánlott) UTF-8 karakterkészleten van a cucc, a te fv-eid nem lesznek jók, hanem az mb_... megfelelőjük (többájtos karakterlánc fv-ek).

A longtext nekem eleve furcsa, a leghosszabb WL cikk is befér (teljes HTML) egy TEXT-be is, ami csak 64K.

Szóval amit írtál, az ilyen megoldásokkal lehet közepes látogatottságnál és rekordszámnál is gyorsan letérdeltetni a szervert...

Jobb úgy közelíteni a dolgokhoz, hogy az SQL szervertől máris csak a nagyjából szükséges adathalmaz kerüljön PHP feldolgozás alá, és itt is a lehető legkevesebb műveletszámmal már menjen is kifelé a HTML. Rekordonként akár 4 gigát betölteni 100 karakter helyett - enyhén szólva nem nagyjából annyi...
3

SUBSTR()

pkadam · 2014. Jan. 5. (V), 04.23
Amennyiben MySQL adatbázisról beszélünk, a SUBSTRING() (vagy rövidebben SUBSTR()) függvény lesz a segítségedre. Első paramétere a bemeneti sztring, a második a kezdő pozíció (0-val indul), a harmadik pedig a hossz. Például a Te esetedben:
SELECT SUBSTR(leiras, 0, 100) AS rovid_leiras FROM tabla
(A PHP-ban történő levágással ellentétben így nem terheli a memóriát a szöveg fel nem használt része.)
4

Hello pkadam! Akkor csak ezt

geforce9600gt · 2014. Jan. 5. (V), 12.23
Hello pkadam!

Akkor csak ezt kell beleraknom a lekérésbe, és akkor a mezőben lévő szövegből csak 100 karaktert vesz ki? Azt hittem a substr csak php-ban van, azt ismerem is.

Egyébként arról van szó, hogy híreket listázok ki, és nincsen rövid leírás mező, csak egy teljes leírás. És a gyüjtőoldalon ahol ki vannak listázva, oda csak pár sor kell, aztán úgyis van egy tovább link a teljes hírre. :)
5

Így most ugyanúgy kirakja az

geforce9600gt · 2014. Jan. 5. (V), 12.38
Így most ugyanúgy kirakja az összes szöveget, még.

Itt néztem példákat: http://www.w3resource.com/mysql/string-functions/mysql-substr-function.php
SELECT id,hirdetes_tipus,kutya_neve,hirdeto_varos,hirdeto_utca,status,thumb,leiras,SUBSTR(leiras,0,10),kutya_seo
FROM hirdetes
7

Költői kérdések

pkadam · 2014. Jan. 5. (V), 13.47
1. Miért kéred le a levágott leírás mellett a teljeset is, ha nincs rá szükséged?
2. A levágott leírást felhasználod valahol? (Ebben a formában egyáltalán fel tudod?)
3. Ismered az AS kulcsszót? Tudod, miért volt benne a példámban, és hogyan tudod a hasznodra fordítani?
6

-

ecrazor · 2014. Jan. 5. (V), 12.42
-
9

Pontosabban?

Pepita · 2014. Jan. 5. (V), 16.58
Ha leírnád pontosabban, mit is szeretnél, mi van a LONGTEXT-ben, akkor többet is tudnánk segíteni, mint csak levágni.

Engem külön érdekelne, hogy milyen szöveges tartalom az, amihez LONGTEXT kell, ki az, aki azt végigolvassa? :)

Szerk.: ha olyasmit akarsz, mint ecrazor tippelt (bevezető, lead), akkor én erre külön oszlopot javasolnék, és minden cikk szerkesztésekor a tartalomból a kis progid generálja a kész lead-et. Ekkor lesz a leggyorsabb a megjelenítés, mert csak simán azt az oszlopot kéred le - és (szinte) mindig a megjelenítés a fontos.
10

Bemásolom, mi van az egyik

geforce9600gt · 2014. Jan. 5. (V), 21.01
Bemásolom, mi van az egyik sorban a leírás mezőben.

A Mozilla pénteken számolt be arról fejlesztői blogjában, hogy ismét sikerült jelentős előrelépést tennie a JavaScript kódok futási sebességének növelése terén. A Firefox JavaScript-motorja legújabb, kísérleti kiadásában ugyanis tovább faragott az asm.js kódok hátrányából a tisztán natív társaikhoz képest, aminek köszönhetően előbbiek futtatása átlagosan már csak 50%-kkal lassabb az erősen optimalizáló C++ fordítók által generált binárisok sebességénél.

A szóban forgó szorzó esetében ugyanakkor csak egy átlagról van szó: valójában bizonyos kódok futtatása a mérések szerint már most is eléri a natív binárisok sebességét - bár vannak olyan tesztek is, ahol a JavaScript még mindig közel két és félszer lassabb az optimalizált C++ kódoknál. Ugyanakkor összemérhető ingadozások a mérések szerint az egyes C++ fordítók között is előfordulnak, azaz azok esetében is néhol 50-100%-kal lassabb lehet a futási sebesség, a használt eszköz függvényében.


És azt szeretném, hogy ebből az egész szövegből az első 100 karaktert vegye ki csak, ne az egész szöveget.
11

Ezt szépen bemásoltad... :)

Pepita · 2014. Jan. 6. (H), 09.12
Mi választja el a bekezdéseket?
Ha HTML-t tárolsz az adatbázisban, miért nem azt másolod be kódszínezővel?
Ha HTML és bekezdések (<p>), akkor csinálhatsz egy plusz oszlopot, amibe az első bekezdést teszed. Nem biztos, hogy 100 karakter, viszont szép lead.
Ez az idézet (így) 951 karakter. Ha HTML, akkor mondjuk legyen 1000. Nem válaszoltál a kérdésre, hogy akkor minek neki LONGTEXT mező... (A TEXT mezőbe 65535 karakter / byte fér, bőven elégnek tűnik...)