problème requête complexe

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : problème requête complexe

par Sékiltoyai » 07 mars 2008, 14:17

Tu dis que ca ne "marche" pas, ca veut dire quoi ?
QUelle requète as tu fais ? Quel résultat obtiens-tu ?
Et oui, c'est faisable facilement sinon je n'aurais pas proposé une solution…

par Invité » 07 mars 2008, 12:02

bon ben n'arrivant toujours pas à faire fonctionner ma requête, je suis évidemment d'accord avec toi steph. Le problème c'est qu'il faut gérer l'affichage par page... donc avec 2 requêtes c'est complexe... ou alors jouer avec des tableaux mais là (j'ai fait le test) ça ralenti énormément.

par steph29 » 07 mars 2008, 11:33

La le pb n'est pas de separer les dates par rapport a la date du jour (AB t'as donne la reponse) mais d'ordonner les 2 listes de facons differentes:

les evenements a venir dans l'ordre croissant
et
les evenements passés dans l'ordre décroissant

Pour ma part je vois deux fonctionnalités antagonistes donc 2 requetes differentes...
(pourquoi faire complique quand on peut faire simple...)
mais je n'attend que d'etre contredit, sans pour autant avoir autant une requete tarabiscotée ;)

par Hubert Roksor » 07 mars 2008, 11:22

Tout simplement, trie tes enregistrements par ordre descendant

Code : Tout sélectionner

SELECT * FROM tbl_newsletter ORDER BY date DESC
Les dates futures apparaitront forcément avant les dates passées.

Sinon, on pourrait utiliser une UNION. Par exemple

Code : Tout sélectionner

SELECT * FROM tbl_newsletter WHERE date > NOW() UNION ALL SELECT * FROM tbl_newsletter WHERE date <= NOW()

par pierre » 07 mars 2008, 09:08

ça ne retourne pas le résultat souhaité ou alors je ne sais pas faire...
Je pensais aussi à des requêtes imbriquées mais ça je ne maîtrise pas

merci quand même

par Sékiltoyai » 07 mars 2008, 03:36

Si je ne me trompe, il est facultatif, non ? :-/

par AB » 07 mars 2008, 01:10

Tu peux faire un truc du style (a adapter pour ton cas) :

Code : Tout sélectionner

SELECT ..., date<NOW() old FROM ... ORDER BY old ASC, txt ASC
t'as pas oublié un 'as' dans ton exemple ?

par Sékiltoyai » 06 mars 2008, 21:40

Tu peux faire un truc du style (a adapter pour ton cas) :

Code : Tout sélectionner

SELECT ..., date<NOW() old FROM ... ORDER BY old ASC, txt ASC

problème requête complexe

par pierre » 06 mars 2008, 18:51

Bonjour,

Je bloque sur l'écriture d'une requête qui devrait permettre d'afficher des articles avec en premier ceux dont la date est supérieure à aujourd'hui, ensuite les autres

SGBD MySQL - 5.0.20a-standard pour la base

ma table

Code : Tout sélectionner

CREATE TABLE `tbl_newsletter` ( `incr_id` int(11) unsigned NOT NULL auto_increment, `txt` varchar(255) default NULL, `date` date NOT NULL, `delete` tinyint(1) unsigned NOT NULL default '0', PRIMARY KEY (`incr_id`) );
mon code

Code : Tout sélectionner

$req_agenda=mysql_query("select * from tbl_agenda where article!=\"\" and delete!=\"1\" order by date asc",$db_link); if(mysql_num_rows($req_agenda)!="0") { $nbre_articles=mysql_num_rows($req_agenda); $affichage = "10"; $nbre_page = ceil($nbre_articles/$affichage); $total_num_page = array(); for($i=1; $i<=$nbre_page; $i++) { $np= $np+1; array_push($total_num_page,$np); } if(isset($_GET['goto_page']) && ($_GET['goto_page']!="0" || $_GET['goto_page']!="")) { $limite_mysql = $affichage * $_GET['goto_page']; } else { $limite_mysql = "0"; } $req_agenda=mysql_query("select * from tbl_agenda where article!=\"\" and delete!=\"1\" order by date asc limit $limite_mysql , $affichage",$db_link); if (mysql_num_rows($req_agenda)>"0") { while ($result_req_agenda = mysql_fetch_array($req_agenda)) { $ecrire_article.=$result_req_agenda['article']."<br />"; } } if ($nbre_articles>$affichage) { // là la gestion des différentes pages } }

Je bloque sur le moyen d'écrire la requête pour que les articles soient ordonnés d'abord par ceux dont la date est supérieure ou égale à aujourd'hui et ensuite les autres

exemple de données
1 Albert 2008-03-10
2 Durand 2008-02-24
3 Dupont 2008-04-16
4 Marcel 2008-01-12
5 Martin 2008-04-08
6 Petit 2008-03-01
7 Jambon 2008-10-12
et ce que la requête devrait retourner supposant que nous soyons le 6 Mars 2008
1 Albert 2008-03-10
5 Martin 2008-04-08
3 Dupont 2008-04-16
7 Jambon 2008-10-12
6 Petit 2008-03-01
2 Durand 2008-02-24
4 Marcel 2008-01-12
Merci d'avance de votre aide