Gå til innhold

mysql og ord kutting ved LEFT('foobarbar', 5)


Anbefalte innlegg

jeg bruker noe lignende av dette:

 

SELECT LEFT('foobarbar', 5);
       -> 'fooba'

 

på en news table for å lage en ingres, men det som er ganske dumt er at den kutter akkurat på angitt plassering selv om det er midt i ett ord, kan det unngås på noen måte? har skummet igjennom mysql manualen og fant ikke noe annet der...

Lenke til kommentar
Videoannonse
Annonse

har en liten nøtt til som har med samme table å gjøre så jeg legger det her:

 

skal først kjøre en:

 

   $firstfive = mysql_db_query($database, "SELECT * FROM news LIMIT 5");
   if(!($firstfive)) {
       array_push($newsarr,"First Five Failed -->".mysql_error());
   }

 

for å bare få ut det første fem innleggene, men hvordan får jeg så kjørt dette på hver av de fem:

 

   $news_short = mysql_db_query($database, "SELECT LEFT(nyhet, 200) AS short_news FROM news group by newsID");
   if(!($news_short)) {
       array_push($newsarr,"Short News Failed -->".mysql_error());
   }

 

og fortsatt så skulle jeg funnet en måte å unngå ordkutting...

Lenke til kommentar
Gjest Slettet-rXRozPkg

Hvis du henter ut hele teksten til en variabel kan du gjøre det logisk i PHP på denne måten:

 

<?php
$tekst = "Ord1 Ord2 Ord3 Ord4 Ord5 Ord6 Ord7 Ord8 Ord9 Ord10 Ord11 Ord12 Ord13 Ord14 Ord15 Ord16";
$txtarray = explode(" ", $tekst);
$antallord = count($txtarray);
$kutt = 10; // kutter etter X ord

if ($antallord > $kutt) { 
   $txtarray = array_slice($txtarray, 0, $kutt);
}

$output = implode(" ", $txtarray);
$output = $output . " ...<br>\n<a href=\"art.php?id=123\">Les hele artikkelen</a><br>\n";
echo $output;
?>

Lenke til kommentar

det jeg har kommet fram til nå er;

 

   $news_var = mysql_db_query($database, "SELECT newsID AS news_ID,title AS news_title,uid AS news_uid,datotid AS news_date,nyhet AS news_nyhet,readmore AS news_readmore FROM news");


   echo("<div id=\"newsBlock\">\r\n");    

   while($row = mysql_fetch_array($news_var)){
           $newsid = $row['news_ID'];    
           $newstitle = $row['news_title'];    
           $newsuid = $row['news_uid'];    
           $newsdate = $row['news_date'];    
           $newsnyhet = $row['news_nyhet'];    
           $newsreadmore = $row['news_readmore'];    

           $txtarray = explode(" ", $newsnyhet);
           $antallord = count($txtarray);
           $kutt = 40;
           if ($antallord > $kutt) {
              $txtarray = array_slice($txtarray, 0, $kutt);
           }
          $output = implode(" ", $txtarray);
          $output = "$output...";

           echo(errarr($newsarr)."\r\n");
           echo("<h2>$newstitle</h2>\r\n<p><small>skrevet av: <a href=\"$newsuid\">$newsuid</a>, $newsdate</small><br />$output\r\n<br />\r\n<a href=\"?s=nyheter&n=$newsid\">Les mer</a></p>\r\n");    
   }

   echo("</div>\r\n");   

 

men da blir altså alle rader printet ut og jeg ser ikke helt hvordan jeg skal få lagt til noe kutting så det bare blir de første fem postene...

 

siden posten allerede er laget:

noen flere mysql spørsmål:

1. når man bruker autoincrement på et felt for å skape en unik id, hvis jeg sletter alle rader i tabellen fortsetter autoincrement på samme tall som den var kommet til, finnes det noen måte å få den til å starte på 1 igjen...

 

2. som det er nå blir eldste post printet først og nyeste sist, kan jeg snu dette i query'en på en eller annen måte, vet at det er mulig i php...

Lenke til kommentar
Gjest Slettet-rXRozPkg

Tja, ser ikke hvorfor den skal spytte ut alle linjene akkurat nå, men de to andre kan jeg svare på.

 

1:

Kjør denne queryen:

DROP TABLE news

 

Så oppretter du tabellen på nytt

 

 

2:

Prøv noe slikt:

SELECT newsID AS news_ID, title AS news_title, uid AS news_uid, datotid AS news_date, nyhet AS news_nyhet, readmore AS news_readmore FROM news ORDEY BY news_ID DESC

Lenke til kommentar
1. når man bruker autoincrement på et felt for å skape en unik id, hvis jeg sletter alle rader i tabellen fortsetter autoincrement på samme tall som den var kommet til, finnes det noen måte å få den til å starte på 1 igjen...

Hvis du bruker phpmyadmin kan du gå inn på innstillingene for en tabell og sette telleren til det du ønsker. Aner ikke hvordan spørringen egentlig er, menmen...

Lenke til kommentar

en primærnøkkel id som er auto_increment bør ikke ha noen annen funksjon en å identifisere rader, hvis du trenger noe spesielt tall på denne (siden du vil ha den på 1 igjen) så viser det at du mest sannsynlig trenger en annen type kolonne til denne funksjonen og ikke auto_increment integer-id'en

 

Men... de gangene jeg har kjørt "delete from tabell" så tror jeg den har begynt på 1 igjen? kan ikke si det med 100% sikkerhet.

 

Det hadde vært elegant å gjøre ordelingen med SQL, men jeg frykter at det blir langt og stygt.

Lenke til kommentar
en primærnøkkel id som er auto_increment bør ikke ha noen annen funksjon en å identifisere rader, hvis du trenger noe spesielt tall på denne (siden du vil ha den på 1 igjen) så viser det at du mest sannsynlig trenger en annen type kolonne til denne funksjonen og ikke auto_increment integer-id'en

nei må bruke den, men var egentlig ment som et spørsmål i forsknings øyemed, hvilke tall jeg får ut har ingen betydning bare de stiger etter som jeg legger til flere rader...

Lenke til kommentar
jeg bruker noe lignende av dette:

 

SELECT LEFT('foobarbar', 5);
       -> 'fooba'

 

på en news table for å lage en ingres, men det som er ganske dumt er at den kutter akkurat på angitt plassering selv om det er midt i ett ord, kan det unngås på noen måte? har skummet igjennom mysql manualen og fant ikke noe annet der...

Jada

SELECT SUBSTRING_INDEX(nyhet, ' ', 5) AS shot_nyhet
FROM news...

Splitter news på ' ' (mellomrom) og tar med de 5 første orda.

Lenke til kommentar

Et søkt tilfelle, men joda. Det er sant det. Men det samme vil explode/implode varianten lenger opp gjøre.

 

Remedy:

SELECT SUBSTRING_INDEX(nyhet,' ', FLOOR(20 *(100.0/LENGTH(SUBSTRING_INDEX(nyhet,' ',20))))) AS short_nyhet
FROM ...

 

Vi tester med 20 mellomrom og ser hvor langt det er. Vi sier at 100 er ca ønsket lengde. Hvis 20 mellomrom blir altfor langt, kutter vi ned vha. 100/lengden av strengen).

 

Nei, det gir ingen garanti, men sjansen er større for et passende resultat.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...