Casse tête SQL
Résolu/Fermé
Shymon
Messages postés
145
Date d'inscription
samedi 9 février 2008
Statut
Membre
Dernière intervention
25 novembre 2012
-
23 avril 2012 à 03:48
Shymon Messages postés 145 Date d'inscription samedi 9 février 2008 Statut Membre Dernière intervention 25 novembre 2012 - 24 avril 2012 à 19:00
Shymon Messages postés 145 Date d'inscription samedi 9 février 2008 Statut Membre Dernière intervention 25 novembre 2012 - 24 avril 2012 à 19:00
A voir également:
- Casse tête SQL
- Casse-tête avec des allumettes - Télécharger - Jeux vidéo
- Écran tv cassé réparation prix ✓ - Forum Ecran
- Remplacer tete sur photo - Guide
- Whatsapp telephone cassé ✓ - Forum WhatsApp
- Un mot est caché dans l'en-tête du document. pour le trouver, modifiez sa couleur. ✓ - Forum Word
10 réponses
Zep3k!GnO
Messages postés
2025
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
18 novembre 2015
200
23 avril 2012 à 12:29
23 avril 2012 à 12:29
C'est du SQLServer ou du MySQL ?
Shymon
Messages postés
145
Date d'inscription
samedi 9 février 2008
Statut
Membre
Dernière intervention
25 novembre 2012
59
23 avril 2012 à 12:52
23 avril 2012 à 12:52
désolé, c'est du mySQL !
cheese42
Messages postés
860
Date d'inscription
mardi 11 septembre 2007
Statut
Membre
Dernière intervention
10 octobre 2018
120
23 avril 2012 à 13:31
23 avril 2012 à 13:31
slt,
<?php
$infos = mysql_query("SELECT * FROM commentaires where date='$tadatepostee'");
$nb1='0';
while ($donnees1 = mysql_fetch_array($infos) )
{
$nb1++;
?>
<table align="center" border="0" cellspacing="0" cellpadding="0" width="600">
<tr>
<td width="300">
<b><?php echo $donnees1['commentaire']; ?></b>,
le <?php echo date('d/m/Y', $donnees1['date']); ?> à <?php echo date('H:i', $donnees1['date']); ?>,
<b><?php echo $donnees1['article']; ?></b></td>
</tr>
</table><br />
<?php } ?>
<?php
$infos = mysql_query("SELECT * FROM commentaires where date='$tadatepostee'");
$nb1='0';
while ($donnees1 = mysql_fetch_array($infos) )
{
$nb1++;
?>
<table align="center" border="0" cellspacing="0" cellpadding="0" width="600">
<tr>
<td width="300">
<b><?php echo $donnees1['commentaire']; ?></b>,
le <?php echo date('d/m/Y', $donnees1['date']); ?> à <?php echo date('H:i', $donnees1['date']); ?>,
<b><?php echo $donnees1['article']; ?></b></td>
</tr>
</table><br />
<?php } ?>
tryan44
Messages postés
1288
Date d'inscription
mardi 24 janvier 2012
Statut
Membre
Dernière intervention
26 octobre 2014
220
23 avril 2012 à 14:10
23 avril 2012 à 14:10
Ce n'est pas une bonne idée le tableau à l'intérieure de la boucle while() car ça va construire une table d'une ligne pour chaque tour de boucle.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Zep3k!GnO
Messages postés
2025
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
18 novembre 2015
200
23 avril 2012 à 14:28
23 avril 2012 à 14:28
Pas de problèmes, c'est même mieux à mon goût ;)
Si c'est du MySQL, je te propose la requête suivante :
Si c'est du MySQL, je te propose la requête suivante :
SELECT * FROM commentaires WHERE ton_champ_date BETWEEN '2012-04-23 00:00:00' AND '2012-04-23 23:59:59' ORDER BY ton_champ_date DESC LIMIT 0,2
Heremion
Messages postés
538
Date d'inscription
vendredi 20 mai 2011
Statut
Membre
Dernière intervention
1 juin 2022
102
23 avril 2012 à 20:54
23 avril 2012 à 20:54
Bonsoir Shymon...
Moi j'aurais fait un truc du genre
Moi j'aurais fait un truc du genre
select date_commentaire, article, commentaire from commentaires where (date_commentaire >= trunc(sysdate)) and (date_commentaire < trunc(sysdate+1)) and (rownum <= 2) group by article,date_commentaire,commentaire order by date_commentaire desc, article
Shymon
Messages postés
145
Date d'inscription
samedi 9 février 2008
Statut
Membre
Dernière intervention
25 novembre 2012
59
23 avril 2012 à 22:05
23 avril 2012 à 22:05
Yep, j'avais tenté un truc dans ce genre, mais le problème est que le GROUP BY est exécuté avant le ORDER BY. Donc il prend d'abord un seul commentaire par article (pas forcement le dernier), puis il les range par date ...
Il faudrait qu'il classe les commentaires par date, puis en selectionne un seul pour chaque article (qui sera donc a priori le dernier ^^). Mais mySQL n'accepte pas que le ORDER BY soit placé avant le GROUP BY ...
Il faudrait qu'il classe les commentaires par date, puis en selectionne un seul pour chaque article (qui sera donc a priori le dernier ^^). Mais mySQL n'accepte pas que le ORDER BY soit placé avant le GROUP BY ...
Heremion
Messages postés
538
Date d'inscription
vendredi 20 mai 2011
Statut
Membre
Dernière intervention
1 juin 2022
102
23 avril 2012 à 23:12
23 avril 2012 à 23:12
Dans ce cas, essaie plutôt un truc du genre
select date_commentaire, article, commentaire from ( select date_commentaire, article, commentaire from commentaires where (date_commentaire >= trunc(sysdate)) and (date_commentaire < trunc(sysdate+1)) order by date_commentaire desc, article ) as temp where (rownum <= 2) group by article,date_commentaire,commentaire
tryan44
Messages postés
1288
Date d'inscription
mardi 24 janvier 2012
Statut
Membre
Dernière intervention
26 octobre 2014
220
24 avril 2012 à 07:53
24 avril 2012 à 07:53
Pourquoi faire aussi compliqué?
Dans cet exemple, l'identifiant du commentaire correspond à l'identifiant de l'article. On effectue un trie décroissant et on sort uniquement le dernier résultat. Le dernier résultat étant forcément le dernier commentaire enregistré qui correspond à l'article.
Select tes_champs FROM commentaires WHERE id_du_commentaire = id_de_l_article ORDER BY DESC LIMIT 1
Dans cet exemple, l'identifiant du commentaire correspond à l'identifiant de l'article. On effectue un trie décroissant et on sort uniquement le dernier résultat. Le dernier résultat étant forcément le dernier commentaire enregistré qui correspond à l'article.
Shymon
Messages postés
145
Date d'inscription
samedi 9 février 2008
Statut
Membre
Dernière intervention
25 novembre 2012
59
24 avril 2012 à 18:48
24 avril 2012 à 18:48
désolé, mais aucun des deux ne donne ce que je recherche ...
Shymon
Messages postés
145
Date d'inscription
samedi 9 février 2008
Statut
Membre
Dernière intervention
25 novembre 2012
59
23 avril 2012 à 22:01
23 avril 2012 à 22:01
Merci !
Mais avec ça, je sélectionne tous les commentaires du jour donné pour chaque article ... or je n'en veut qu'un seul par article, le dernier du jour :)
Mais avec ça, je sélectionne tous les commentaires du jour donné pour chaque article ... or je n'en veut qu'un seul par article, le dernier du jour :)
Zep3k!GnO
Messages postés
2025
Date d'inscription
jeudi 22 septembre 2005
Statut
Membre
Dernière intervention
18 novembre 2015
200
24 avril 2012 à 10:46
24 avril 2012 à 10:46
Rah ok, j'avais pas compris comme ça...
En 1 seul coup, j'avoue j'ai un peu de mal, tu peux pas le faire en 2 requêtes ?
1 ou tu sélectionne en Distinct tes articles puis tu boulce dessus et tu utilises ma requete ci-dessus en mettant le limit à 0 , 1 et en ajoutant dans le where un and sur l'article courant de la boucle ?
En 1 seul coup, j'avoue j'ai un peu de mal, tu peux pas le faire en 2 requêtes ?
1 ou tu sélectionne en Distinct tes articles puis tu boulce dessus et tu utilises ma requete ci-dessus en mettant le limit à 0 , 1 et en ajoutant dans le where un and sur l'article courant de la boucle ?
Shymon
Messages postés
145
Date d'inscription
samedi 9 février 2008
Statut
Membre
Dernière intervention
25 novembre 2012
59
24 avril 2012 à 18:58
24 avril 2012 à 18:58
Merci de votre aide,
Je pense avoir trouvé un moyen de résoudre le problème en une requête.
Bon c'est un peu du bricolage, mais ça marche très bien pour moi ;)
Pour info : je concatène la date (en timestamp unix) et le commentaire, et je cherche le MAX de ce champ concaténé (qui correspondra donc au dernier commentaire). Ensuite il me suffit de séparer la date et le commentaire en PHP ^^
Je pense avoir trouvé un moyen de résoudre le problème en une requête.
Bon c'est un peu du bricolage, mais ça marche très bien pour moi ;)
Pour info : je concatène la date (en timestamp unix) et le commentaire, et je cherche le MAX de ce champ concaténé (qui correspondra donc au dernier commentaire). Ensuite il me suffit de séparer la date et le commentaire en PHP ^^
SELECT MAX(CONCAT_WS('%%', UNIX_TIMESTAMP('date'), 'commentaire')) FROM 'ma_table' WHERE DATE('date') = 2012-04-23 GROUP BY 'article'
Shymon
Messages postés
145
Date d'inscription
samedi 9 février 2008
Statut
Membre
Dernière intervention
25 novembre 2012
59
24 avril 2012 à 19:00
24 avril 2012 à 19:00
Je pourrais ! Mais en l'occurence, je peux avoir beaucoup d'article et beaucoup de commentaires, donc je préfère faire une seule requête plutôt que autant de requête qu'il y a d'article ...