| 
					
							
        
    
        
						
			 | 
			
			
					    
					
        
         
          
         
	
            | [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.
 
 
  
            
             |   |   
            
        
 
    
 
					
					 
			 | 
			
				
        
			 |