Bonjour,
J'ai 1 table visits dans laquelle mes visiteurs stockent des infos :
J'établis des critères de sélection et veux savoir combien de membres correspondent. Jusque là, pas de soucis :
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 CREATE TABLE `visits` ( `rec_num` int(11) NOT NULL auto_increment, `vis_date` bigint(20) default NULL, `rank` varchar(4) default NULL, `rank_seniority` int(11) default NULL, `licence` varchar(4) default NULL, `licence_seniority` int(11) default NULL, `employer` varchar(4) default NULL, ... `cvisits` int(11) NOT NULL default '1', `member_id` int(11) NOT NULL, `action_ref` int(11) default NULL, `company_id` int(11) default NULL, `employer_id` int(11) default NULL, PRIMARY KEY USING BTREE (`rec_num`,`member_id`) ) ENGINE=MyISAM AUTO_INCREMENT=242 DEFAULT CHARSET=utf8
Maintenant imaginons que je veuille ajouter une ligne dans une deuxième table, pour chacun de ces membres sélectionnés :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT COUNT(DISTINCT member_id) FROM visits WHERE member_id>0 AND (rank='CDT' OR rank='CEN') AND rank_seniority<5 AND (licence='MAUN' OR licence='CEUN' OR licence ='CE15')
Ma table :
Je connais object_ref, object_type.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 CREATE TABLE `selectobject` ( `rec_num` int(11) NOT NULL auto_increment, `select_date` timestamp NOT NULL default CURRENT_TIMESTAMP, `member_id` int(11) NOT NULL, `object_ref` int(11) NOT NULL, `object_type` int(11) NOT NULL, `answer_date` datetime default NULL, `report_date` datetime default NULL, PRIMARY KEY USING BTREE (`rec_num`,`object_type`,`object_ref`,`member_id`) ) ENGINE=MyISAM AUTO_INCREMENT=311 DEFAULT CHARSET=utf8 COMMENT='link betwn members and polls, adds,joboffers...'
select_date est un timestamp.
answer_date et report_date restent null :
J'essaye une première requête qui fonctionne :
Par contre, comment ajouter le DISTINCT ? Cette requête ne marche pas:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 INSERT INTO selectobject (object_type, object_ref, member_id) SELECT $object_type, $object_ref, member_id FROM visits WHERE member_id>0 AND (rank='CDT' OR rank='CEN') AND rank_seniority<5 AND (licence='MAUN' OR licence='CEUN' OR licence ='CE15')
Cerise sur le gâteau, chaque membre pouvant saisir plusieurs entrées dans la table visits (par exemple à plusieurs mois d'intervalle), comment ne tenir compte que de la dernière de ces déclarations ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 INSERT INTO selectobject (object_type, object_ref, member_id) SELECT $object_type, $object_ref, DISTINCT member_id FROM visits WHERE member_id>0 AND (rank='CDT' OR rank='CEN') AND rank_seniority<5 AND (licence='MAUN' OR licence='CEUN' OR licence ='CE15')
En comptage, celle-ci semble ok :
Mais en INSERT, cela ne marche plus car j'ai une différence de nombre de champs retournés par ma requête SELECT et remplis par ma requête INSERT :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT COUNT(DISTINCT member_id) max(vis_date) FROM visits WHERE member_id>0 AND (rank='CDT' OR rank='CEN') AND rank_seniority<5 AND (licence='MAUN' OR licence='CEUN' OR licence ='CE15')
Une idée ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 INSERT INTO selectobject (object_type, object_ref, member_id) SELECT $object_type, $object_ref, DISTINCT member_id max(vis_date) FROM visits WHERE member_id>0 AND (rank='CDT' OR rank='CEN') AND rank_seniority<5 AND (licence='MAUN' OR licence='CEUN' OR licence ='CE15')
Merci de votre aide !
Px
Partager