[PHP/MySQL] Maximaal aantal zinnen uit database

Pagina: 1
Acties:
  • 128 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • DaFrenk
  • Registratie: Februari 2006
  • Laatst online: 18-08 20:39
Hi guys,

Ik probeer voor een nieuwsitem overzicht een soort korte inleiding te laten weergeven op de frontpage. Bijvoorbeeld maximaal 5 zinnen. Is dit mogelijk in PHP/MySQL? Het lijkt me wel want ik heb het idee het vrij vaak te zien. Ik kan me overigens wel voorstellen dat je dan moet werken met een maximaal aantal karakters, maar bij voorkeur laat je natuurlijk mooie hele zinnen zien.

Iemand een idee? Ik heb allerlei mogelijke zoektermen hier en op google geprobeerd, maar ik vind nergens wat ik zoek.

Thanks!

Acties:
  • 0 Henk 'm!

  • Flapp
  • Registratie: December 2004
  • Laatst online: 20-05-2024
Een zin eindigt altijd met een punt.
je zou eventueel kunnen exploden op punten, en dan een x aantal zinnen kunnen neerzetten.

"Stilte, een gat in het geluid...."


Acties:
  • 0 Henk 'm!

  • Gonadan
  • Registratie: Februari 2004
  • Nu online

Gonadan

Admin Beeld & Geluid, Harde Waren
DaFrenk schreef op maandag 25 juni 2007 @ 15:06:
Hi guys,

Ik probeer voor een nieuwsitem overzicht een soort korte inleiding te laten weergeven op de frontpage. Bijvoorbeeld maximaal 5 zinnen. Is dit mogelijk in PHP/MySQL? Het lijkt me wel want ik heb het idee het vrij vaak te zien. Ik kan me overigens wel voorstellen dat je dan moet werken met een maximaal aantal karakters, maar bij voorkeur laat je natuurlijk mooie hele zinnen zien.

Iemand een idee? Ik heb allerlei mogelijke zoektermen hier en op google geprobeerd, maar ik vind nergens wat ik zoek.

Thanks!
Je kunt bijvoorbeeld de 5e newline of punt zoeken en daar de string afbreken.
Met functies als explode kan je dan een heel eind komen. :)

edit:
spuit11 :+

Look for the signal in your life, not the noise.

Canon R6 | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


Acties:
  • 0 Henk 'm!

  • _Apache_
  • Registratie: Juni 2007
  • Laatst online: 09:46

_Apache_

For life.

Heeft MySQL ook geen datatypen zoals ms acces 'MEMO' heeft?! Hier kan je (vrijwel) onbeperkt aantal karakters in kwijt.

Zero SR/S 17.3kWh / 2700WP PV / HRSolar zonneboiler


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
De meeste Nederlandse zinnen eindigen doorgaans op een punt (.), vraagteken (?) of uitroepteken (!). Zoek nummer 5 op van een van deze tekens en neem een substring van begin tot dat punt.

Je hebt het probleem dan niet verholpen als er een punt, vraagteken of uitroepteken halverwege de zin staat (zoals in mijn eerste zin), maar over het algemeen komen die niet vaak voor en is die kans dus verwaarloosbaar. Ik zou dus voor deze simpele (php) oplossing gaan :)

Acties:
  • 0 Henk 'm!

  • Johnny
  • Registratie: December 2001
  • Laatst online: 21-09 14:39

Johnny

ondergewaardeerde internetguru

Het makkelijkst is om gewoon een extra veld in je database te maken voor een samenvatting die je dan handmatig invoert. Een andere manier is om een 'break'-tekst in je tekst te zetten p het moment dat je het wilt afbreken, vervlogens haal je de hele tekst uit je databse zien en controleer je met PHP waar de break voorkomt, en bij de weergave van het hele artikel filter je deze er uit.

Nog een een andere manier is om de zinnen te tellen, dat moet dan ook weer in PHP en dan moet je controleren op .!? karakters, maar deze methode heeft dan wel als nadeel dat die karakters alleen aan het einde van een zin mogen voorkomen wat in de praktijk misschien wel eens anders kan zijn.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Acties:
  • 0 Henk 'm!

  • DaFrenk
  • Registratie: Februari 2006
  • Laatst online: 18-08 20:39
Ja, een extra invoerveld kan. Maar het is toch wel vervelend om speciaal een inleiding te schrijven. Ik ga het eens proberen door explode te gebruiken. Ik acht de klans vrij klein dat er midden in een zin een punt zal staan, dus ik waag de gok.

Nog een ander vraagje, het kan wel eens zijn dat er een afbeelding in de eerste vijf zinnen terecht komt, maar om de layout niet te verkloten zou ik die eigenlijk willen verwijderen. Nu kan ik zoeken op " <img " om te vinden waar een afbeelding begint, maar hoe kan ik ervoor zorgen dat hij alles tussen het begin (<img) en het einde (de closing >) verwijderd?

Acties:
  • 0 Henk 'm!

  • OnTracK
  • Registratie: Oktober 2002
  • Laatst online: 21-09 20:37
Het is altijd makkelijk om zelf even bij de mogelijkheden te kijken die je database heeft:
SUBSTRING_INDEX(str,delim,count)

Returns the substring from string str before count occurrences of the delimiter delim. If count is positive, everything to the left of the final delimiter (counting from the left) is returned. If count is negative, everything to the right of the final delimiter (counting from the right) is returned. SUBSTRING_INDEX() performs a case-sensitive match when searching for delim.

SQL:
1
2
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2);
        -> 'www.mysql'

SQL:
1
2
mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2);
        -> 'mysql.com'
Ik zou overigens voor '. ' kiezen ([punt][spatie]), om te voorkomen dat '...' gelijk drie matches geeft en je stuk intro nogal kort is.

Not everybody wins, and certainly not everybody wins all the time.
But once you get into your boat, push off and tie into your shoes.
Then you have indeed won far more than those who have never tried.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 21-09 02:21

Janoz

Moderator Devschuur®

!litemod

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • DaFrenk
  • Registratie: Februari 2006
  • Laatst online: 18-08 20:39
Thanks, ik kwam er net achter.. je hoeft niet te vloeken hoor ;)

@OnTrack:

Thanks! Dat ziet er goed uit!

[ Voor 9% gewijzigd door DaFrenk op 25-06-2007 15:46 ]


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21-09 21:47

Creepy

Tactical Espionage Splatterer

offtopic:
Read The Fine Manual, komt geen vloek in voor :Y)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

Verwijderd

Google: mysql string substring
MID(), SUBSTR() of SUBSTRING() (deze drie zijn identiek)
met als parameters (string, start, length)

Acties:
  • 0 Henk 'm!

  • netvor
  • Registratie: September 2000
  • Laatst online: 08-04-2024
DaFrenk schreef op maandag 25 juni 2007 @ 15:42:
Ja, een extra invoerveld kan. Maar het is toch wel vervelend om speciaal een inleiding te schrijven.
Je zou dan ook een systeem kunnen hanteren waarbij de mensen die de content tikken een x aantal witregels neer kunnen zetten, en dat dat dan als breakpoint wordt gezien. Zoiets dus:
code:
1
2
3
4
5
6
7
8
lorem ipsum bla bla...[een aantal zinnen lang].
bla bla
bla




en hier is dan de rest van het artikel. lorem ipsum enzovoorts.


Als failsafe kan je dan altijd nog de hierboven beschreven methodes hanteren indien er geen blok van 3 of meer witregels aanwezig is.

Computer Science: describing our world with boxes and arrows.


Acties:
  • 0 Henk 'm!

  • DaFrenk
  • Registratie: Februari 2006
  • Laatst online: 18-08 20:39
Dat is inderdaad ook nog een mogelijkheid natuurlijk, thanks!

Ik denk dat ik nu wel voldoende weet overigens, dus wat mij betreft is dit topic opgelost :) Bedankt!

Acties:
  • 0 Henk 'm!

  • Johnny
  • Registratie: December 2001
  • Laatst online: 21-09 14:39

Johnny

ondergewaardeerde internetguru

DaFrenk schreef op maandag 25 juni 2007 @ 15:42:
Ja, een extra invoerveld kan. Maar het is toch wel vervelend om speciaal een inleiding te schrijven. Ik ga het eens proberen door explode te gebruiken. Ik acht de klans vrij klein dat er midden in een zin een punt zal staan, dus ik waag de gok.
Ja want punten worden tenslotte alleen maar gebruikt in afkortingen, tijden, getallen, samentrekkingen en citaten en allerlei andere situaties, en de kans dat er ooit iemand zoiets in een zin gaat gebruiken is natuurlijk vrij klein. Daarnaast zijn er genoeg mensen die graag hun zinnen afsluiten met een stortlading aan leestekens zoals '???!!!!'.

In een normale zin zoals deze zitten al 8 punten:
De heer J. Jansen zal zaterdag om 18.00 uur 1.000.000 euro schenken aan stichting A.I.W. gevestigd in de burg. Klaasenlaan.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Acties:
  • 0 Henk 'm!

  • DaFrenk
  • Registratie: Februari 2006
  • Laatst online: 18-08 20:39
Johnny schreef op maandag 25 juni 2007 @ 17:47:
[...]


Ja want punten worden tenslotte alleen maar gebruikt in afkortingen, tijden, getallen, samentrekkingen en citaten en allerlei andere situaties, en de kans dat er ooit iemand zoiets in een zin gaat gebruiken is natuurlijk vrij klein. Daarnaast zijn er genoeg mensen die graag hun zinnen afsluiten met een stortlading aan leestekens zoals '???!!!!'.

In een normale zin zoals deze zitten al 8 punten:


[...]
Daarom heeft OnTracK ook een goed punt door te zoeken op ". ", punt spatie dus. Daarmee voorkom je al veel problemen met afkortingen en tijden. In jouw zin echter zal het idd mis gaan met Burg. Dat kan misschien een probleem zijn ja. Het zal geen content worden met zinnen die eindigen op !!!??!? ofzo.. dus daar hoef ik me ook niet druk om te maken.

Maar goed, dat het geen super systeem is ben ik het met je eens. De tijd zal het leren of er fouten gaan ontstaan, zo ja.. dan vervang ik het door een afzonderlijk inleidingsveld.. zo niet, dan laat ik het gewoon staan.

[ Voor 4% gewijzigd door DaFrenk op 25-06-2007 18:21 ]


Acties:
  • 0 Henk 'm!

  • Hydra
  • Registratie: September 2000
  • Laatst online: 21-08 17:09
Je zou het ook kunnen oplossen door in PHP de eerste punt na een X aantal karakters op te zoeken, en daarop af te breken? Nog een kans dat je op de punt in "J. Jansen" breekt maargoed, geeft waarschijnlijk een mooier resultaat.

https://niels.nu


Acties:
  • 0 Henk 'm!

  • DaFrenk
  • Registratie: Februari 2006
  • Laatst online: 18-08 20:39
Nou, bij nader inzien (gezien het kader van de nieuwsitems) besluit ik toch maar om een afzonderlijk inleidingsveld te gebruiken. Veiligheid voor alles om het zo maar te noemen.

Blijf ik me afvragen hoe de grote sites dat doen in bijvoorbeeld hun RSS feeds, daar laten ze ook altijd een preview tekst zien van het totaal. Of zou dat ook in de vorm van een inleidingsveld gedaan zijn?

Acties:
  • 0 Henk 'm!

  • Paul C
  • Registratie: Juni 2002
  • Laatst online: 23:39
Mogelijk doen ze het wel automatisch, maar laten ze het door de schrijver controleren in de preview?

Er is geen manier om automatisch en met zekerheid zinnen te scheiden. Hiervoor moet je namelijk een interpretatie van de tekst maken en daar zijn computers nog niet zo goed in. Een lijst met veelgebruikte afkortingen zou kunnen helpen, maar is ook niet zaligmakend.

Acties:
  • 0 Henk 'm!

  • Blaise
  • Registratie: Juni 2001
  • Niet online
Kan je anders niet een breekpunt teken/tekenreeks maken die je uit de uiteindelijke output stript? (of vervangt door <a name="lees_verder"></a>). Dan hoef je niet meerdere database velden te maken en de auteur kan zelf bepalen waar de preview eindigt.

Het nadeel is dat je teksten "vervuild" worden met een breekpunt.

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Ach tja, wat ik ooit wel eens gebouwd heb ( is vrij simpel ) is gewoon x tekens van de totale tekst, nu kijken of er een . dichter vooraan of achteraan komt en hier op afkappen ( en dan nog een extra controle op max aantal tekens zodat niet iemand 2000 tekens zonder leesteken kan invoegen )

Op deze manier houd je altijd ongeveer even grote teksten, zonder dat je met aantal punten etc te maken hebt.
Alleen moet je met deze manier goed omgaan met caching omdat het vrij zwaar is ( dus oftewel na invoeren opslaan in de dbase als short-hand en als je het al apart opslaat in je dbase waarom dan niet eerst laten checken door je gebruiker zodat die er nog enkele fouten / correcties in kan maken )
Pagina: 1