|
| [mySQL] tælle antal ord, i udtræk Fra : Leonard |
Dato : 10-05-07 14:28 |
|
Jeg har en blog i en mySQL tabel, hvor jeg udtrækker enpost således:
SELECT ID, date, content, title FROM posts WHERE ID='$id' LIMIT 1
Da en post ikke har en fast størrelse kommer det nogengange til at se
lidt tomt ud, når der kun står 2 linier på siden. Derfor vil jeg gerne
tælle antallet af ord og så vælge et antal poster, så jeg mindst har fx
500 ord.
Det skal så kunne begyndes med post ID og sorteres efter date.
Findes der en smart måde i mySQL eller skal jeg programmere det i PHP ?
--
Leonard
http://vw.leonard.dk/
| |
Martin (10-05-2007)
| Kommentar Fra : Martin |
Dato : 10-05-07 23:40 |
|
Leonard wrote:
> Jeg har en blog i en mySQL tabel, hvor jeg udtrækker enpost således:
>
> SELECT ID, date, content, title FROM posts WHERE ID='$id' LIMIT 1
SELECT
...
FROM
...
WHERE
CHAR_LENGTH(content) > x
x = Min. antal tegn i en post
PS:
< http://dev.mysql.com/doc/refman/5.1/en/string-functions.html>
PPS:
Du skal nok fjerne din WHERE ID='$id' da $id gør jo at du KUN får den
ene post, og ingen anden
| |
Peter Brodersen (11-05-2007)
| Kommentar Fra : Peter Brodersen |
Dato : 11-05-07 00:07 |
|
On Thu, 10 May 2007 15:28:15 +0200, Leonard <piper28a@gmail.invalid>
wrote:
>Da en post ikke har en fast størrelse kommer det nogengange til at se
>lidt tomt ud, når der kun står 2 linier på siden. Derfor vil jeg gerne
>tælle antallet af ord og så vælge et antal poster, så jeg mindst har fx
>500 ord.
>Det skal så kunne begyndes med post ID og sorteres efter date.
>
>Findes der en smart måde i mySQL eller skal jeg programmere det i PHP ?
Hvis du kommer til at have rigtigt, rigtigt mange indlæg, deriblandt
mange korte indlæg, og vil have en decideret optimering i din
database, kan du gemme antallet af ord i et felt for sig, som du så
indekserer og vælger på i din forespørgsel.
Det er sandsynligvis overkill for en blog med nogle hundrede indlæg
Hvis det blot handler om et bestemt antal tegn, så kan CHAR_LENGTH()
være en hurtig løsning.
Der findes mig bekendt ikke en let måde at tælle ord eller bestemte
tegn på, men et typisk hack er at tage differencen i længden mellem
hele strengen, og så strengen uden mellemrum i, fx:
SELECT (
CHAR_LENGTH(field) -
CHAR_LENGTH(REPLACE(field,' ',''))
) AS spaces
FROM
...
Så har du antallet af mellemrum, og dermed tilnærmelsesvis antallet af
ord.
Hvis du fortløbende vil blive ved med at hente rækker, indtil du er
nået op på fx 2000 tegn sammenlagt, er følgende en mulighed:
SET @charcount = 0;
SELECT field, @charcount := @charcount + CHAR_LENGTH(field)
FROM aut
WHERE @charcount < 2000;
Det kan dog slet og ret godt tænkes, at det er lettere at håndtere det
i din applikation af hensyn til hurtige ændringer i præsentationen.
--
- Peter Brodersen
Kendt fra Internet
| |
Michael Zedeler (13-05-2007)
| Kommentar Fra : Michael Zedeler |
Dato : 13-05-07 19:59 |
|
On Thu, 2007-05-10 at 15:28 +0200, Leonard wrote:
> Jeg har en blog i en mySQL tabel, hvor jeg udtrækker enpost således:
>
> SELECT ID, date, content, title FROM posts WHERE ID='$id' LIMIT 1
>
> Da en post ikke har en fast størrelse [klip] vil jeg gerne
> tælle antallet af ord og så vælge et antal poster, så jeg mindst har fx
> 500 ord.
> Det skal så kunne begyndes med post ID og sorteres efter date.
>
> Findes der en smart måde i mySQL eller skal jeg programmere det i PHP ?
SELECT * FROM posts WHERE content REGEX '([[^[blank]]+[blank]]+){20}.+'
Den kigger efter posts hvor content indeholder mindst 20 ord efterfulgt
af mellemrum. Men det er en temmelig dyr løsning. Jeg foreslår at du
blot kigger på længden af content og så iøvrigt får koden der indsætter
nye poster til at erstatte alle multiple forekomster af white space med
ét mellemrum.
Mvh. Michael.
| |
|
|