/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
[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.



Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409073
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste