Autor Zpráva
oberon
Profil *
Zdravím vás,

vytvořil jsem si v php vyhledávání řetězců z databáze, ovšem narazil jsem na jeden problém. V jednom sloupci databáze je text dlouhý cca 1000 znaků a při vyhledání ho nechám zobrazit celý, což se nakonec ukázalo jako nedobré řešení a tak jsem nechal funkcí substr zobrazovat jen prvních 50 znaků, což už se jevilo jako schůdnější řešení.
Ovšem co si nebohý uživatel počne, když použije vyhledávání, script něco v databázi najde, vypíše prvních 50 znaků, ale ten hledaný řetězec tam není? Dalo by se nějak efektivně vyřešit, aby např. ten hledaný řetězec (řekněme např. "pravda") zobrazil v tom výsledku (v těch 50 znacích)?

Takže místo toho, aby to vypsalo: "Tak tohle je už vážně na pováženou, to snad"
vypsalo "..je už vážně na pováženou, to snad není pravda.."

Snad jsem to napsal tak, že mne pochopíte :-)

Díky za rady!
ninja
Profil
Z databaze nactete text a na 50 znaku omezite az v aplikaci?

Pak nezobrazujte prvnich 50 znaku, ale 50 znaku od prvni pozice hledaneho textu - 25 znaku.
Joker
Profil
oberon
Možná by to šlo nějak takhle:

SELECT IF(INSTR(text, "co hledám") > 40, SUBSTR(text, (INSTR(text, "co hledám") - 25), 50), SUBSTR(text, 0, 50)) FROM tabulka WHERE text LIKE "%co hledám%"

...ale fakt jen tipuju :-)
oberon
Profil *
Z databaze nactete text a na 50 znaku omezite az v aplikaci?
ano, přesně tak :-)

Pak nezobrazujte prvnich 50 znaku, ale 50 znaku od prvni pozice hledaneho textu - 25 znaku.
... a právě to mi dělá starosti. Motám se v tom, jako vítr v bedně, ale nemůžu na to prostě přijít :-(
ninja
Profil
oberon: tak si precte co delaji funkce strpos a substr. Zbytek je proste jednoduche odcitani a deleni:

1. Pomoci strpos najdu prvni vyskyt.
2. Od jeho pozice odectu 25 (pripadne 25 - polovina delky hledaneho slova).
3. Pres substr zobrazim cast text zacinajici cislem vypoctenym v bode 2 a o pozadovane delce 50 znaku.


Pokud pracujete v UTF-8, nezapomente pouzit patricne verze funkci mb_*.
oberon
Profil *
ninja
ano ano, to je přesně ono. Marně jsem hledal fci strpos. Díky za nakopnutí :-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0