cs_skit
Messages postés54Date d'inscriptionvendredi 24 octobre 2003StatutMembreDernière intervention23 septembre 2009
-
15 juil. 2008 à 06:12
Evangun
Messages postés1980Date d'inscriptiondimanche 20 février 2005StatutMembreDernière intervention24 septembre 2012
-
15 juil. 2008 à 17:05
Bonsoir à tous.
<?
$news=mysql_query("
(SELECT Timestamp, Titre, Text FROM ".$extensionSQL."article)
UNION
(SELECT Timestamp, Titre, Text FROM ".$extensionSQL."communiques)
UNION
(SELECT Timestamp, Titre, Text FROM ".$extensionSQL."actions)
UNION
(SELECT Timestamp, Titre, Text FROM ".$extensionSQL."agenda)
UNION
(SELECT Timestamp, Titre, Text FROM ".$extensionSQL."passages)
UNION
(SELECT Timestamp, Titre, Text FROM ".$extensionSQL."tracts)
ORDER BY Timestamp LIMIT 5
");
while($news2=mysql_fetch_array($news))
{
echo substr(stripslashes($news2['Text']),0,30)."
";
}
?>
Voici un module de mon site qui me pose problème.
Je vous explique brièvemet; j'ai diverses sections (agenda, articles,...) et je fais un menu à gauche qui reprend tous les évènements postés dans ces sections et les classe par ordre décroissant de Timestamp (date à laquelle l'évènement est créé).
J'ai donc unifié toutes ces tables par ordre de Timestamp et j'affiche les titres et les textes des 5 premiers (d'où la limite).
Pour les textes, je souhaite afficher juste les 30 premiers caractères; j'ai donc utilisé un substr mais voila le premier problème qui se pose; mes codes sont coupés. Quand j'ai un et qu'il est coupé alors je me retrouve avec un bête <a h ou encore dans certains cas je me retrouve avec un &eacu ce qui est plutôt ridicule et je ne sais pas comment éviter ça.
C'est mon premier problème, apparemment substr n'est pas la fonction la plus appropriée pour ça.
Ensuite j'aimerai ne sélectionner que le texte car je me vois mal afficher une image ou une vidéo dans cette petite barre mais je ne connais pas de fonction php et je n'en trouve pas qui ne permet que de sélectionner le texte.
cs_skit
Messages postés54Date d'inscriptionvendredi 24 octobre 2003StatutMembreDernière intervention23 septembre 2009 15 juil. 2008 à 14:54
J'ai du mal à comprendre ton raisonnement.
Bon je prends par exemple:
[test.php salut]
Bonjour écoutez tous!
Je fais un strip tags()
salut Bonjour écoutez tous!
Je fais un html_entity_decode()
salut Bonjour écoutez tous!
Je fais un substr()
salut Bonjour &eacu
Je fais un html_entities()
salut Bonjour &eacu
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_skit
Messages postés54Date d'inscriptionvendredi 24 octobre 2003StatutMembreDernière intervention23 septembre 2009 15 juil. 2008 à 16:06
Il ne reconnait pas la fonction htmlentities() (bizarre)
Mais malgré tout le résultat est exactement ce que j'attendais; merci beaucoup pour cette réponse claire et rapide
cs_skit
Messages postés54Date d'inscriptionvendredi 24 octobre 2003StatutMembreDernière intervention23 septembre 2009 15 juil. 2008 à 16:41
Bon j'ai un autre petit problème auquel je n'avais pas pensé.
Chaque évènement a un ID généré dans sa table et chaque table correspond à une page (par exemple: la table Site_agenda reprend les évènements de la page agenda.php où je peux isoler l'évènement par agenda.php?article=ID)
J'avais fait des UNION sur mes tables pour pouvoir avoir un classement par timestamp de toutes les nouveautés (ainsi j'obtiens les 5 dernières nouveautés parmis toutes les tables du site).
Petit problème; je souhaite placer un lien qui redirige vers l'article mais je dois pour ça pouvoir récupérer ensuite la table d'où provient l'article après l'UNION.
Je n'ai trouvé aucune fonction php pour ça, quelqu'un a une idée?
Merci
Evangun
Messages postés1980Date d'inscriptiondimanche 20 février 2005StatutMembreDernière intervention24 septembre 20124 15 juil. 2008 à 16:55
Si tes événements sont si similaires, ils devraient tous être dans la même table, avec un champs supplémentaire pour dire s'ils sont relatifs à l'agenda.
Si tu veux garder ta structure, en faisant 5 requêtes c'est facile de différencier les tables d'origine, mais effectivement avec 1 seule requête ce n'est pas possible, à moins de rajouter une colonne dans chaque table qui contiendra le nom de la table, mais c'est complètement idiot.
cs_skit
Messages postés54Date d'inscriptionvendredi 24 octobre 2003StatutMembreDernière intervention23 septembre 2009 15 juil. 2008 à 16:59
Ils ne sont pas similaires; ils ont chacun un titre, un id, un timestamp, un text et un user (le créateur de l'évènement). Tous les autres champs varient et c'est pour ça que je n'ai pas créé une table générale.
Sinon j'aurai eu une table avec 40 champs dont la plupart sont rarement remplis et le temps de traitement de ma table aurait été horriblement long pour le serveur.
Si je fais 5 requêtes, je ne peux pas les classer par ordre de Timestamp les-unes par rapport aux autres.
Evangun
Messages postés1980Date d'inscriptiondimanche 20 février 2005StatutMembreDernière intervention24 septembre 20124 15 juil. 2008 à 17:05
Dans l'idéal il te faut 1 table événement. Cette table comportera un champ "type d'événement" qui te permettra de faire une jointure vers les autres tables, chacune dédiée à un type d'événement.
Si tu veux persévérer avec une multitude de tables, tu peux, mais tu devras trier par date avec php, pas en sql.