Bonjour,
Je possède deux tables. L'une contenant des news et l'autre permettant de savoir si un administrateur a vu ou non la news.
Le but est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 CREATE TABLE `news` ( `id` int(11) NOT NULL auto_increment, `user_id_posteur` int(11) NOT NULL default '0', `Message` text NOT NULL, `Titre` varchar(50) NOT NULL default '', `SourceNom` varchar(105) NOT NULL default '', `SourceUrl` text NOT NULL, `Date` int(11) NOT NULL default '0', `nb_vu` varchar(40) default NULL, `concerne` varchar(255) NOT NULL default '', `last_modif` int(11) NOT NULL default '0', `user_last_modif` int(11) NOT NULL default '0', PRIMARY KEY (`id`) ) CREATE TABLE `news_admin` ( `user_id_admin` int(11) NOT NULL default '0', `news_id` int(11) NOT NULL default '0', `etat` int(11) NOT NULL default '0' )
- Si une nouvelle news est entrée dans la table news, je pourrai être averti car il n'y a pas d'infos dans news_admin correspondant à l'id de la news ajoutée.
- Pour noter comme vu une news, il suffit d'ajouter dans la table news_admin l'id de la news avec l'état '1' (j'ai arbitrairement choisi 1).
- Lorsqu'une personne modifie une news, il suffit de mettre les champs etat à '2' pour la news correspondante.
Je souhaite à présent afficher toutes les nouvelles news et les news modifiées pour l'administrateur numéro 2. Il y a une nouvelle news et une news modifiée pour cet admin :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 SELECT n.id, n.Titre, n.last_modif, a.etat FROM news_admin a RIGHT OUTER JOIN news n ON a.news_id = n.id AND a.user_id_admin = 2 1 905 total, traitement: 0.1533 sec > 1903 etat à 1 > 1 etat à 2 > 1 etat à NULL SELECT n.id, n.Titre, n.last_modif, a.etat FROM news_admin a RIGHT OUTER JOIN news n ON a.news_id = n.id AND a.user_id_admin = 2 WHERE etat = 2 1 total, traitement: 0.0039 sec > 1 etat à 2 SELECT n.id, n.Titre, n.last_modif, a.etat FROM news_admin a RIGHT OUTER JOIN news n ON a.news_id = n.id AND a.user_id_admin = 2 WHERE etat = 2 OR etat IS NULL 2 total, traitement: 10.2352 sec > 1 etat à 2 > 1 etat à NULL
J'arrive effectivement avec la dernière requête a extraire la news ajoutée et la news modifiée, mais le temps de traitement est de 10 secondes !
Si j'utilise la première requête et que je fais le tri des résultats en php (c'est-à-dire que je ne garde que les état NULL ou égalent à 2) c'est aussi très long.
Quelqu'un sait pourquoi cela prend autant de temps de tester simplement un IS NULL sur le champs etat ? Je ne comprends pas cet écart de temps de traitement...
Partager