Forums Rue-Montgallet.com
Rue-Montgallet.comRue-Hardware.comRue-Occasion.comRue-DVD.comRue-Jeuxvideo.comRue-AudioVideo.comRue-Telephone.comForums
S'inscrire | S'identifier |
| Recherche avancée | Aide
 
 

Achat - Vente Informatique : racoboss et 15 utilisateurs inconnus

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

Sélection particulière dans une BDD

 
n°6701
yapa
Fumo !
Profil : Dinosaure
Posté le 19-02-2004 à 13:40:43  profilanswer
 

Hum voila j'ai fait un formulaire de news et une page permettant de les afficher.
 
Seulement j'aimerais savoir comment afficher seulement les trois dernières news par exemple. Et de ce fait de la news la plus récente a la plus vieille...
 
J'ai pensé à  
 
SELECT * FROM `news`ORDER BY `id` DESC  LIMIT idmax, 3
 
En fait le idmax n'existe pas, mais j'aimerais savoir comment faire pour prendre le id maximal et récuperer les trois d'après... je sais pas si vous comprenez bien :roule: c'est po clair :ddr:
 

n°6702
ollone
Part of the 'One brothers
Profil : Vieux de la vieille
Posté le 19-02-2004 à 13:59:03  profilanswer
 

Je serais toi, je rajouterais un champ 'date' dans ma table si ce n'est déjà fait; type-le en timestamp ou qqe chose du même style.
Ensuite c'est selon ce critère que tu vas les trier, ainsi tu t'assures de récupérer les trois plus récente (constante de temps).
=> $requete = "select * from news order by date desc limit 3";
 
sinon, si tu t'appuies sur l'id de tes news :
=> $requete = "select * from news order by id desc limit 3";
 
ps: un "select *" n'est jamais le plus performant, je te conseille de ne récupérer de ta table que ce dont tu as besoin.


Message édité par ollone le 19-02-2004 à 13:59:33

---------------
C'est naturel que les filles soient plus belles, et les garçons plus cons ^^ [un peu bonobo sur les bords]
n°6703
nico95
A la poursuite du SMS Staÿle
Profil : Dinosaure
Posté le 19-02-2004 à 14:40:08  profilanswer
 

ollOne a écrit :


ps: un "select *" n'est jamais le plus performant, je te conseille de ne récupérer de ta table que ce dont tu as besoin.

Effectivement, cela évite d'obliger le SGBD à aller analyser la structure de la table sélectionnée, et d'en extraire la liste des colonnes la composant.
 
Spécifier, même toutes les colonnes, est bien plus rapide .

n°6706
yapa
Fumo !
Profil : Dinosaure
Posté le 19-02-2004 à 15:52:45  profilanswer
 

ok en fait j'avais pas bien compris le fonctionnement de la fonciton limit :jap: je vais essayer ça :)

n°6707
yapa
Fumo !
Profil : Dinosaure
Posté le 19-02-2004 à 15:58:49  profilanswer
 

<?php
 
$db = mysql_connect('sql.free.fr','login','*******');
 
mysql_select_db('login',$db);
 
$result = mysql_query('SELECT * FROM news SORT BY id DESC LIMIT 3');
 
 
while($data=mysql_fetch_array($result))
 
{
    echo $data[0].$data[1].$data[2]."<BR>";
}
 
mysql_close($db);
 
?>
 
Ca marche pas il me met :
 
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /var/www/free.fr/f/7/login/news.php on line 9

n°6709
nico95
A la poursuite du SMS Staÿle
Profil : Dinosaure
Posté le 19-02-2004 à 16:11:35  profilanswer
 

LIMIT 0,3

n°6710
tifrere
Junos power
Profil : Dinosaure
Posté le 19-02-2004 à 16:20:42  profilanswer
 

SELECT * FROM news ORDER BY id DESC LIMIT 0,3
 
le LIMIT 0,3 signifie
 
je veux les 3 lignes a partir de l'enregistrement numéro 0 (le premier koi )


Message édité par tifrere le 19-02-2004 à 16:21:23

---------------
Speed, Quality, Price ... pick any two
n°6711
nico95
A la poursuite du SMS Staÿle
Profil : Dinosaure
Posté le 19-02-2004 à 16:24:31  profilanswer
 

ORDER BY, j'avais pas vu ;)

n°6712
yapa
Fumo !
Profil : Dinosaure
Posté le 19-02-2004 à 16:27:46  profilanswer
 

Ah vi chu icon chaippa pk j'ai mis SORT [:coyotito]

n°6713
yapa
Fumo !
Profil : Dinosaure
Posté le 19-02-2004 à 16:29:13  profilanswer
 

C'est bon ça marche nickel :love:
 
Merci :jap:

n°6740
yapa
Fumo !
Profil : Dinosaure
Posté le 20-02-2004 à 10:39:34  profilanswer
 

ollOne a écrit :

Je serais toi, je rajouterais un champ 'date' dans ma table si ce n'est déjà fait; type-le en timestamp ou qqe chose du même style.
Ensuite c'est selon ce critère que tu vas les trier, ainsi tu t'assures de récupérer les trois plus récente (constante de temps).
=> $requete = "select * from news order by date desc limit 3";
 
sinon, si tu t'appuies sur l'id de tes news :
=> $requete = "select * from news order by id desc limit 3";
 
ps: un "select *" n'est jamais le plus performant, je te conseille de ne récupérer de ta table que ce dont tu as besoin.


 
Euh j'aimerais plus de précisions sur le timestamp et sur le datetime...
 
Si j'ai bien compris, le timestamp insère automatiquement dans la table, la date a laquelle on insère la news... mais j'ai fait plusieurs essais dans mon fichier d'envoi de news mais ça marche pas...
 
je vous donne mon code d'envoi :
 
<html>
<body>
<?php  
 
$date = date("d-m-Y" );
$time = date("H:i:s" );
 
?>
 
<form action="admin2.php" method="post">
<input type="hidden" name="act" value="ajouter">
<h3 align=center><font color="black" face="Arial">Remplir une news</font></h3>  
 <table border="1" bordercolor="black" align=center bgcolor="#CCCCCC">
   <td>Titre :</td><td><input name="titre" type="text">
  </tr>
  <tr>
   <td>Texte :</td><td><textarea name="news" cols="40" rows="5"></textarea></td>
  </tr>  
 </table>
<br>
 <table border="0" align=center>
  <tr>
   <td><input type="submit" value="Valider"></td>
  </tr>
 </table>
</form>
 
<h5 align=center>
 
<? echo 'Le '.$date,' &agrave; '.$time; ?>
 
</h5>
 
<?php
$titre = $_POST['titre']; //convertit la valeur
$news = $_POST['news'];
$act = $_POST['act'];
 
if(empty($titre))
{
exit();
}  
 
if(empty($news))
{
exit();
}
 
$db = mysql_connect('sql.free.fr','yapette','********'); //connecte au serveur
 
mysql_select_db('yapette',$db); //selectionne la bdd
 
$req = mysql_query("INSERT INTO `news` VALUES ('','','$titre','$news')" ); //envoie les données
 
mysql_close(); //ferme le serveur
?>
 
<?php
if($act!='')
{
echo '<b>Vous avez bien envoy&eacute; la news :</b>';
print ("<br><br>" );
echo $titre;
print ("<br><hr size=2 width=500 align=left>" );
echo $news;
}
?>
 
</body>
</html>
 
Ce que ça donne :  
 
http://yapette.free.fr/admin2.php
 
Et dans la table :
 
date             id      titre        news
00000000     5        test       test

n°6742
yapa
Fumo !
Profil : Dinosaure
Posté le 20-02-2004 à 10:59:51  profilanswer
 

Ya pas un truc du genre  
 
INSERT INTO `news` VALUES ('','$titre','$news') SET ts=NOW()
 
a mettre ? [:humanrage]

n°6743
nico95
A la poursuite du SMS Staÿle
Profil : Dinosaure
Posté le 20-02-2004 à 10:59:56  profilanswer
 

essaie avec  
 
$req = mysql_query("INSERT INTO `news` VALUES (now(),'','$titre','$news')" ); //envoie les données

n°6744
yapa
Fumo !
Profil : Dinosaure
Posté le 20-02-2004 à 11:00:24  profilanswer
 

nico95 a écrit :

essaie avec  
 
$req = mysql_query("INSERT INTO `news` VALUES (now(),'','$titre','$news')" ); //envoie les données  


 
:jap: vais essayer

n°6745
nico95
A la poursuite du SMS Staÿle
Profil : Dinosaure
Posté le 20-02-2004 à 11:01:23  profilanswer
 

un autre conseil : si tu as le temps, installe phpmyadmin
pour tester tes requetes, ce sera bien plus rapide ;)

n°6746
yapa
Fumo !
Profil : Dinosaure
Posté le 20-02-2004 à 11:04:22  profilanswer
 

Je l'ai déja installé :)
 
mais j'aime pas trop, enfin ca me dérange pas de faire glisser déposer un fichier dans filezilla pour tester :spamafote:
 
Ahhh c'est bon :jap: merci ça marche pour le timestamp !! :D
 
Maintenant faut que je la convertisse dans un format plus correct pour l'affichage des news je vais essayer tout seul et pis je vous rappellerais si j'y arrive pas...
 
:hello:

n°6838
yapa
Fumo !
Profil : Dinosaure
Posté le 24-02-2004 à 16:26:42  profilanswer
 

Me revoila avec mes questions de débutant :D
Voila, maintenant j'ai fais des miniatures de photos pour une gallerie ; ici en l'occurence, c'est pour la page d'accueil (on n'affiche que les trois dernières miniature) et j'ai mis en place un système de notations pour les photos, ainsi les membres peuvent noter une photo, et faire un commentaire dessus.
 
Mais j'aimerais que la note moyenne s'affiche en dessous de la miniature directement ! donc j'ai ça :
 
$affphoto = mysql_query("SELECT id,titre,auteur FROM photos ORDER BY id DESC LIMIT 0,3" );
 
while($photo = mysql_fetch_row($affphoto)) {
 
$aff_note = mysql_query("SELECT note FROM commentaires WHERE photo_id=$photo[0]" );  
 
etc.... }
 
Donc j'ai récupéré les notes concernant chaque photo (puisque  toutes les notes et tous les commentaires de l'ensemble des photos sont stockés dans la table commentaire).
 
Sauf que je ne sais pas faire la moyenne ! l'idéal étant d'aditionner les notes pour chaque photo (ça, c'est pas trop dur) et de diviser par le nbre total de photos :spamafote: mais ce nombre je me creuse la tete pour le récupérer, mais je sais pas coment faire, et j'ai toruvé de fonction pour ça :( (pourtant j'ai regardé sur php.net pour middle, medium, average... mais rien trouvé!)
 

n°6840
Baziel
Profil : Membre
Posté le 24-02-2004 à 16:45:09  profilanswer
 

Pourtant en SQL "SELECt Avg(Note) ..." ça existe. ?!?

n°6841
yapa
Fumo !
Profil : Dinosaure
Posté le 24-02-2004 à 16:50:03  profilanswer
 

Baziel a écrit :

Pourtant en SQL "SELECt Avg(Note) ..." ça existe. ?!?


 
ben je veux bien essayer :D je vais voir !
 
merci d'avance si vous avez d'autres réponses ! :D

n°6842
yapa
Fumo !
Profil : Dinosaure
Posté le 24-02-2004 à 17:05:02  profilanswer
 

:winner: après plusieurs essais, ça marche :D
 
Merci bcp :jap:
 
Mtn faut que je trouve comment arrondir, parce que la j'ai des résultats avec 4 chiffres après la virugle [:coyotito]

n°6843
yapa
Fumo !
Profil : Dinosaure
Posté le 24-02-2004 à 17:19:31  profilanswer
 

ah ben c'est bon la fonction arrondir j'ai trouvé ca existe déja en php :D
 
cool tout fonctionne :jap: merci


Aller à :
Ajouter une réponse