Sa change rien :?
Version imprimable
Sa change rien :?
C'est étrange ce que tu me dis , la première requête est (entre autre) responsable de la sélection de toutes les catégories (via les articles et un join) , il y a normalement 2 manières de procéder :
- Mettre un limit pour sélectionner seulement la dernière rubrique
- Mettre un distinct pour sélectionné LES dernières rubriques
En parlant de "dernière rubrique" je parle évidemment des rubriques dont les articles sont les plus vieux.
Que ni l'une ni l'autre ne marche (surtout celle du LIMIT) je comprends pas bien la ....
en modifiant le limit :
Code:
1
2
3
4
5
6
7
8
9 $rep = "select DISTINCT article.numrubrique as 'numrubrique', article.numart as 'numart', article.titreart as 'titreart', rubrique.librubrique as 'librubrique' From article join rubrique where rubrique.numrubrique = article.numrubrique order by article.dateart desc LIMIT 0,1";
Sa m'affiche bien une rubrique:
TEST (24)
Mais le probleme c'est le 24 il devrait y avoir 10 a la place:?
euuh dsl je voulais dire 14 :D
C'est la fatigue:cry:
RE voila j'ai un probleme en faite le code affiche les articles les plus anciens que d'UNE rubrique et il faudrait qu'elle affiche les articles les plus anciens peu importe leur rubrique.
Voila
Bonne fin de journée:ccool:
Donne la structure de tes tables , on va surement changer les requêtes parce que la ça devient de la bidouille crade :aie:
oki lool
Voici mes tables :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243 - phpMyAdmin SQL Dump -- version 2.11.9.3 -- http://www.phpmyadmin.net -- -- Serveur: MySQL5.hebergement.com -- Généré le : Jeu 18 Juin 2009 à 15:41 -- Version du serveur: 5.0.45 -- Version de PHP: 5.2.6 SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; -- -- Base de données: `db_bloggaly2_1` -- -- -------------------------------------------------------- -- -- Structure de la table `archives` -- CREATE TABLE IF NOT EXISTS `archives` ( `numart` bigint(4) default NULL, `titreart` tinytext, `librubrique` char(32) default NULL, `numrubrique` bigint(4) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -------------------------------------------------------- -- -- Structure de la table `article` -- CREATE TABLE IF NOT EXISTS `article` ( `NUMART` bigint(4) NOT NULL auto_increment, `NUMRUBRIQUE` bigint(4) NOT NULL, `TITREART` tinytext character set latin1, `TEXTEART` text character set latin1, `DATEART` char(32) character set latin1 default NULL, PRIMARY KEY (`NUMART`), KEY `NUMRUBRIQUE` (`NUMRUBRIQUE`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=66 ; -- -------------------------------------------------------- -- -- Structure de la table `envoyer` -- CREATE TABLE IF NOT EXISTS `envoyer` ( `NUMNEWS` bigint(4) NOT NULL, `Date_envoi` datetime NOT NULL, `NUMMAIL` bigint(4) NOT NULL, PRIMARY KEY (`NUMNEWS`,`NUMMAIL`), KEY `FK_ENVOYER_MAIL` (`NUMMAIL`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- -------------------------------------------------------- -- -- Structure de la table `lien` -- CREATE TABLE IF NOT EXISTS `lien` ( `NUMLIEN` bigint(4) NOT NULL auto_increment, `NUMTYPE` bigint(4) NOT NULL, `ADRESSE` text, PRIMARY KEY (`NUMLIEN`), KEY `FK_LIEN_TYPE` (`NUMTYPE`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=59 ; -- -------------------------------------------------------- -- -- Structure de la table `lien_img` -- CREATE TABLE IF NOT EXISTS `lien_img` ( `NUMLIEN` bigint(4) NOT NULL, `IMAGE` text character set utf8 collate utf8_unicode_ci, `INFO` text character set utf8 collate utf8_unicode_ci NOT NULL, PRIMARY KEY (`NUMLIEN`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- -------------------------------------------------------- -- -- Structure de la table `lien_txt` -- CREATE TABLE IF NOT EXISTS `lien_txt` ( `NUMLIEN` bigint(4) NOT NULL, `TEXTE` char(32) default NULL, PRIMARY KEY (`NUMLIEN`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- -------------------------------------------------------- -- -- Structure de la table `mail` -- CREATE TABLE IF NOT EXISTS `mail` ( `NUMMAIL` bigint(4) NOT NULL auto_increment, `MAIL` char(32) default NULL, PRIMARY KEY (`NUMMAIL`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ; -- -------------------------------------------------------- -- -- Structure de la table `newsletter` -- CREATE TABLE IF NOT EXISTS `newsletter` ( `NUMNEWS` bigint(4) NOT NULL auto_increment, `NUMERO` int(11) NOT NULL, `SUJET` char(32) default NULL, `CONTENU` text, PRIMARY KEY (`NUMNEWS`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ; -- -------------------------------------------------------- -- -- Structure de la table `parametre` -- CREATE TABLE IF NOT EXISTS `parametre` ( `txt_present` text NOT NULL, `txt_contact` text NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- -------------------------------------------------------- -- -- Structure de la table `question` -- CREATE TABLE IF NOT EXISTS `question` ( `NUMQUEST` bigint(4) NOT NULL auto_increment, `NUMREP` bigint(4) default NULL, `NUMMAIL` bigint(4) NOT NULL, `DATE` char(32) default NULL, `SUJET` text, `TEXTE` text, PRIMARY KEY (`NUMQUEST`), KEY `FK_QUESTION_UTIL_QUEST` (`NUMMAIL`), KEY `NUMREP` (`NUMREP`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=42 ; -- -------------------------------------------------------- -- -- Structure de la table `reponse` -- CREATE TABLE IF NOT EXISTS `reponse` ( `NUMREP` bigint(4) NOT NULL auto_increment, `DATE` char(32) default NULL, `QUESTION` text, `REPONSE` text, PRIMARY KEY (`NUMREP`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Structure de la table `rubrique` -- CREATE TABLE IF NOT EXISTS `rubrique` ( `NUMRUBRIQUE` bigint(4) NOT NULL auto_increment, `LIBRUBRIQUE` char(32) default NULL, PRIMARY KEY (`NUMRUBRIQUE`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=27 ; -- -------------------------------------------------------- -- -- Structure de la table `trigger_answer` -- CREATE TABLE IF NOT EXISTS `trigger_answer` ( `trigger_name` varchar(50) NOT NULL, `TS` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, `result` text, PRIMARY KEY (`trigger_name`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -------------------------------------------------------- -- -- Structure de la table `trigger_request` -- CREATE TABLE IF NOT EXISTS `trigger_request` ( `trigger_name` varchar(50) NOT NULL, `trigger_body` text, `ts` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, `done` int(11) default '0', PRIMARY KEY (`trigger_name`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -------------------------------------------------------- -- -- Structure de la table `type` -- CREATE TABLE IF NOT EXISTS `type` ( `NUMTYPE` bigint(4) NOT NULL auto_increment, `TYPE` char(32) default NULL, PRIMARY KEY (`NUMTYPE`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ; -- -------------------------------------------------------- -- -- Structure de la table `utilisateur` -- CREATE TABLE IF NOT EXISTS `utilisateur` ( `NUMUT` bigint(4) NOT NULL auto_increment, `LOGIN` char(32) default NULL, `MDP` char(32) default NULL, PRIMARY KEY (`NUMUT`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Structure de la table `util_quest` -- CREATE TABLE IF NOT EXISTS `util_quest` ( `NUMMAIL` bigint(4) NOT NULL, `NOM` char(32) default NULL, `PRENOM` char(32) default NULL, PRIMARY KEY (`NUMMAIL`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Hum , dernière bidouille après je ferais les tests chez moi ce soir avec un serveur et tes schémas...(bah ouais a l'aveugle au taff spa pratique)
Code:
1
2
3
4
5
6
7
8
9 SELECT `article`.`NUMART` AS `numart`, `article`.`TITREART` AS `titreart`, `rubrique`.`LIBRUBRIQUE` AS `librubrique`, `article`.`NUMRUBRIQUE` AS `numrubrique` FROM (`article` JOIN `rubrique`) WHERE (`rubrique`.`NUMRUBRIQUE` = `article`.`NUMRUBRIQUE`) ORDER BY `article`.`DATEART` DESC GROUP BY `numrubrique` LIMIT 10,30;
En enlevant les cotes sa donne:
Code:
1
2
3
4
5
6
7
8
9 $rep = "SELECT article.NUMART AS `numart`, article.TITREART AS `titreart`, rubrique.LIBRUBRIQUE AS 'librubrique`, article.NUMRUBRIQUE AS `numrubrique` FROM (article JOIN rubrique) WHERE (rubrique.NUMRUBRIQUE = article.NUMRUBRIQUE) ORDER BY article.DATEART DESC GROUP BY numrubrique LIMIT 10,30";
Cela m'affiche une erreur:
L'insertion a echouée car
En tout cas merci encore pour ton aide précieuseCitation:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''librubrique`, article.NUMRUBRIQUE AS `numrubrique` FROM (article JOIN rubrique' at line 3.
l'erreur est la , c'est pas la bonne quote lolCitation:
rubrique.LIBRUBRIQUE AS 'librubrique`,
Et ça continu lool
L'insertion a echouée car You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP BY numrubrique LIMIT 10,30' at line 8.
Il faut inverser group by et order by
Code:
1
2
3
4
5
6
7
8
9 SELECT `article`.`NUMART` AS `numart`, `article`.`TITREART` AS `titreart`, `rubrique`.`LIBRUBRIQUE` AS `librubrique`, `article`.`NUMRUBRIQUE` AS `numrubrique` FROM (`article` JOIN `rubrique`) WHERE (`rubrique`.`NUMRUBRIQUE` = `article`.`NUMRUBRIQUE`) GROUP BY `numrubrique` ORDER BY `article`.`DATEART` DESC LIMIT 10,30
Re
Désolé de répondre tardivement mais je n'étais pas chez moi.
Donc en ce qui concerne le code il marche mais il y a un probleme.
Je m'explique.
Ce code:
Code:
1
2
3
4
5 $reqart = "SELECT numart,titreart FROM article WHERE numrubrique=".$numrub." ORDER BY DATEART LIMIT 0,1";
Selectionne les articles de chaque rubriques .
Mais le probleme est que imaginons je créer une nouvelle rubrique, je crée un titre d'article .
Eh ben cette rubrique apparaitra dans archive car c'est l'article le plus ancien de la rubrique comme il est le seul!!!
Alors qu'il faut sélectionner les articles les plus anciens peu importe leur rubrique.
Je ne s'ai pas si j'ai étais clair .
MErciiii mec pour tout:ccool:
bah après ça parait evident .....faut quand meme que tu analyse ce que tu fais , si encore au lieu de faire un limit , tu prenais comme critere la date (genre date < 10 jours) bah tu aurais pas de probleme d'article tout neuf dans les archives ....hors la tu fais une limite et tu ne tiens pas compte des dates donc les articles seuls dans des rubriques y apparaissent.Citation:
Eh ben cette rubrique apparaitra dans archive car c'est l'article le plus ancien de la rubrique comme il est le seul!!!
On ne peut pas non plus tout te coder , il faut quand meme que tu prenne un moment pour reflechir a ce que tu fais et ce que tu veux.
je comprends mais bon j'ai du mal à me debuger seul. bref
Sa donnerait:
Code:WHERE ADDDATE(article.DATEART,INTERVAL 10 DAY)<CURDATE()
ça se comprends tout a fait , donc il faut faire comme tu viens de le faire , proposer ce que tu pense faire , et on valide/corrige et non pas l'inverse , montrer des bouts de code erroné et nous devons derriere trouver la solution.
ça c'est une bonne idee en effet.
tu as aussi cette solution :
Code:WHERE DATEDIFF(article.DATEART,CURDATE())>10
Je vais essayer d'évoluer :lol:
Je dois l'ajouter à la premiere "grosse" requete ou à la deuxieme requete???:roll:
Je dirais dans la grosse...mais je suis pas dans ton projet :aie:
Moi aussi je pensait cela.
Mais le probleme lorsque que je fais cela:
Code:
1
2
3
4
5
6
7
8
9
10 $rep = "SELECT article.NUMART AS `numart`, article.TITREART AS `titreart`, rubrique.LIBRUBRIQUE AS `librubrique`, article.NUMRUBRIQUE AS `numrubrique` FROM (article JOIN rubrique) WHERE (rubrique.NUMRUBRIQUE = article.NUMRUBRIQUE) AND DATEDIFF(article.DATEART,CURDATE())>10 GROUP BY numrubrique ORDER BY article.DATEART DESC LIMIT 0,10";
Rien ne s'affiche :?
TU n'as peut etre pas d'articles dont la date de creation date de plus de 10 jours , tu as essayé dans phpMyAdmin ?
j'ai testé dans phpmyadmin et il me renvoi aucun enregistrement.
Puis j'ai tester avec
Pour voir si il me les affiche correctement et la surpriseCode:AND DATEDIFF(article.DATEART,CURDATE())>0
Aucun enregistrement.:?:?
Par contre en faisant l'inverse:
Code:AND DATEDIFF(article.DATEART,CURDATE())<0
phpmyadmin me renvoit bien l'articles le plus ancien pour chaque rubrique
ce qui veut dire que datediff fait la "distinction" entre les 2 dates , donc la date la plus ancienne doit etre donnée en second , en echangeant les parametres tu vas revenir sur un chiffre positif :
Code:AND DATEDIFF(CURDATE(),article.DATEART)>10
Ok j'ai compris
Mais le probleme est qu'il sélectionne seulement le plus ancien pour chaque rubrique et moi je voudrais les 10 articles les plus anciens peu importe leur rubrique.
Je pense qu'il faudrait modifier le GROUP BY non?
Mais le probleme c'est qu'il faudrait faire un group by numart
Et lorsque je fais cela.
La meme rubrique est affiché plusieurs fois:
EVENEMENTS (15)
o Inauguration Maison des seniors
o Inauguration Sun design
o Rencontre avec le Président Nicolas Sarkozy
o La rentrée solennelle Université Nice Inter-âges 2008-2009
o TEST SAID
EVENEMENTS (9)
o Inauguration Maison des seniors
o Inauguration Sun design
o Rencontre avec le Président Nicolas Sarkozy
o La rentrée solennelle Université Nice Inter-âges 2008-2009
o TEST SAID
ÉCONOMIE ET FINANCES (53)
o Débat sur la crise économique
o La bourse
o Crise financière
...
Il faudrait pouvoir regrouper les rubriques.:?
ET lr group by rubrique t'affichait quoi ?
il regroupé les rubriques sa c'était bien mais a cause de "lui" il selectionnait seulement les articles les plus anciens pour chaques rubrique.