Limiter caractères affichés

WRInaute occasionnel
Bonjour,

Voila j'aimerais afficher sur une page que les X premiers caractères contenus dans une table renfermant du texte.

Que dois je mettre dans ma requete ?

Merci d'avance
 
WRInaute impliqué
Code:
SELECT SUBSTRING(le_champ_texte,1,le_nom_de_caractere) AS extrait FROM table

Ca devrait marcher.
 
WRInaute occasionnel
merci
En fait j'ai trouvé select left après maus je n'arrive pas à l'intrégrer dans ma requete.

Je voudrai qu'au lieu de m'afficher tout le contenu de "texte", il lm'affiche disons les 20 premiers caractères. je sais pas ou et comment mettre SELECT LEFT.

Code:
$result = mysql_query("SELECT id_news, titre, texte FROM news ORDER BY date_news DESC LIMIT 5"); 

while ($row = mysql_fetch_assoc($result)) { 
   foreach($row as $k => $r) { 
      if (!empty($r)) { 
         switch($k) { 
case 'id_news': 
echo '<a href="http://www.protection-des-animaux.org/actualites/archives-'.$r.'.html" class="liste_article_titre">';
            break; 
	 case 'titre': 
               echo '-&nbsp;'.$r.'</a><br />';
            break;
 case 'texte': 
               echo '<div class="liste_article_texte">'.$r.'</div><br />';
            break;
           default : 
 echo '';           
         } 

      } 
}
echo '';
}
 
WRInaute impliqué
Code:
$result = mysql_query("SELECT id_news, titre, SUBSTRING(texte,1,20) as extrait FROM news ORDER BY date_news DESC LIMIT 5");

while ($row = mysql_fetch_assoc($result)) {
   foreach($row as $k => $r) {
      if (!empty($r)) {
         switch($k) {
case 'id_news':
echo '<a href="http://www.protection-des-animaux.org/actualites/archives-'.$r.'.html" class="liste_article_titre">';
            break;
    case 'titre':
               echo '-&nbsp;'.$r.'</a><br />';
            break;
 case 'extrait':
               echo '<div class="liste_article_texte">'.$r.'</div><br />';
            break;
           default :
 echo '';           
         }

      }
}
echo '';
}

Ca devrait fonctionner .
 
WRInaute occasionnel
pourquoi tu ne limiterais pas au niveau de l'affichage php ?

if(strlen($post[texte]) > 50) {
$str_coupee = substr($post[texte], 0, 50);
$str_coupee .= "…" ;
echo "$str_coupee<br>";
}
 
WRInaute impliqué
scores a dit:
pourquoi tu ne limiterais pas au niveau de l'affichage php ?

if(strlen($post[texte]) > 50) {
$str_coupee = substr($post[texte], 0, 50);
$str_coupee .= "…" ;
echo "$str_coupee<br>";
}

Ca marche aussi scores, mais dans l'absolu, c'est pas top, parce que tu fais envoyer à MySQL des données inutiles. Imagine que son text c'est un document de 400 pages, et qu'il veut juste le début.

Le mieux est de limiter les transfert de données aux seules données utilisables.

Mais encore une fois, c'est une solution qui marche ;)
 
WRInaute occasionnel
Merci ça marche.
Par contre je viens de m'appercevoir que je dors debout, il y a un hic dans ce que je veux faire.

en fait il fudrait pas afficher les X premiers caractères mais les X premiers mots, je doute que ça soit possible.

Parce que la dans mes news, ça me coupe en plein milieu de mots... Ca le fait pas trop.
 
WRInaute impliqué
Dans ce cas tu peux combiner la requête et couper plus ou moins en php cette fois, de manière à obtenir rapidement un mot coupé après un espace.

Code:
$result = mysql_query("SELECT id_news, titre, SUBSTRING(texte,1,20) as extrait FROM news ORDER BY date_news DESC LIMIT 5");

while ($row = mysql_fetch_assoc($result)) {
   foreach($row as $k => $r) {
      if (!empty($r)) {
         switch($k) {
case 'id_news':
echo '<a href="http://www.protection-des-animaux.org/actualites/archives-'.$r.'.html" class="liste_article_titre">';
            break;
    case 'titre':
               echo '-&nbsp;'.$r.'</a><br />';
            break;
 case 'extrait':
               echo '<div class="liste_article_texte">'.substr(0,strrpos($r,' ')).'</div><br />';
            break;
           default :
 echo '';           
         }

      }
}
echo '';
}
 
Discussions similaires
Haut