magikern Skrevet 5. november 2003 Del Skrevet 5. november 2003 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
magikern Skrevet 5. november 2003 Forfatter Del Skrevet 5. november 2003 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 Skrevet 5. november 2003 Del Skrevet 5. november 2003 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
magikern Skrevet 5. november 2003 Forfatter Del Skrevet 5. november 2003 hadde egentlig lyst til å gjøre i mysql(hvis mulig), men ja det er nok lettest sånn ja... Lenke til kommentar
magikern Skrevet 5. november 2003 Forfatter Del Skrevet 5. november 2003 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 Skrevet 5. november 2003 Del Skrevet 5. november 2003 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
toer Skrevet 5. november 2003 Del Skrevet 5. november 2003 ORDER BY `id` DESC LIMIT 0 , 5 i mysql query en din vil jo kun vise de 5 siste : og i tillegg snu slik siste blir vist først *grin* Lenke til kommentar
magikern Skrevet 5. november 2003 Forfatter Del Skrevet 5. november 2003 ORDER BY `id` DESC LIMIT 0 , 5 i mysql query en din vil jo kun vise de 5 siste : og i tillegg snu slik siste blir vist først *grin* var vist akkurat det jeg lette etter... Lenke til kommentar
dms Skrevet 5. november 2003 Del Skrevet 5. november 2003 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
Torbjørn Skrevet 6. november 2003 Del Skrevet 6. november 2003 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
magikern Skrevet 6. november 2003 Forfatter Del Skrevet 6. november 2003 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
Torbjørn Skrevet 6. november 2003 Del Skrevet 6. november 2003 det vil den da også gjøre... trenger du nummer som er strikt et tall større en forige rad i tabellen, ville jeg istedet manuelt angitt et tall som er 1 større enn antall rader eller største verdi av id. Lenke til kommentar
RottePostei Skrevet 8. november 2003 Del Skrevet 8. november 2003 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
Torbjørn Skrevet 8. november 2003 Del Skrevet 8. november 2003 du kan fortsatt få med en forlang setning, f.eks hvis de 4 første orda hver er på 20 tegn. får du smekket inn en test som justerer antall ord som skal vises avhengig av total lengde på utklippet tekst? Lenke til kommentar
RottePostei Skrevet 8. november 2003 Del Skrevet 8. november 2003 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
Torbjørn Skrevet 8. november 2003 Del Skrevet 8. november 2003 En konstant streben etter det perfekte Jeg har ikke svaret på dette sånn uten videre, men ser for meg at det blir en stygg spørring. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå