Requêtes imbriquées pour remplir une table

aissam92 Messages postés 2 Date d'inscription vendredi 20 mars 2009 Statut Membre Dernière intervention 30 mars 2009 - 30 mars 2009 à 11:01
bonapart002 Messages postés 45 Date d'inscription mercredi 17 décembre 2008 Statut Membre Dernière intervention 9 février 2011 - 30 mars 2009 à 15:47
Bonjour tout le monde. J'aurais besoin de votre aide car je suis un peu en galère.

J'ai 2 tables qui ont aux structures suivantes:

Table1:
CREATE TABLE `site_image` (
  `id` int(11) NOT NULL auto_increment,
  `Site` varchar(30) NOT NULL,
  `Poids_Image` int(30) NOT NULL,
  `priorite_image` int(11) default NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `Site` (`Site`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=65 ;


Table2:
CREATE TABLE `site_trafic` (
  `id` int(11) NOT NULL auto_increment,
  `Site` varchar(30) NOT NULL,
  `PIC_TOT_TRAFIC_SEM` int(30) NOT NULL,
  `priorite_trafic` int(11) NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `Site` (`Site`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=64 ;


Pour chaque ligne, j'ai besoin de comparer la valeur de `priorite_image` à celle de `priorite_trafic`, et de prendre la valeur maximum. Pour ceci j'utilise la requête suivante:

$selection= SELECT If(site_image.priorite_image>=site_trafic.priorite_trafic,site_image.priorite_image,site_trafic.priorite_trafic) AS max, site_trafic.site
FROM site_trafic, site_image
WHERE site_trafic.site=site_image.site;


J'ai une 3ème table qui a la structure suivante:

CREATE TABLE `requete1` (
  `id` varchar(30) NOT NULL,
  `max` varchar(30) NOT NULL,
  `site` varchar(30) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


J'aimerais remplir cette dernière table en prenant le maximum des 2 valeurs ainsi que 'site', l'id s'autoincrémente. Pour ceci j'utilise la requête suivante:

$requete1="INSERT INTO requete1 VALUES (SELECT If(site_image.priorite_image>=site_trafic.priorite_trafic,site_image.priorite_image,site_trafic.priorite_trafic) AS max, site_trafic.site
FROM site_trafic, site_image
WHERE site_trafic.site=site_image.site)";


Ceci ne marche pas! Quoi faire?

En résumé, la requête nommée $selection marche sant problème car elle sélectionne le max. Mais dès que je veux remplir ma table requete1 avec le max 'site, ça marche pas!

Voilà l'erreur retournée par MySQL dans PHPMyAdmin si ça peut vous aider à déchiffrer mon problème :-)

MySQL a répondu:

#1064 - 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 'SELECT If(site_image.priorite_image>=site_trafic.priorite_trafic,site_image.prio' at line 1 

1 réponse

bonapart002 Messages postés 45 Date d'inscription mercredi 17 décembre 2008 Statut Membre Dernière intervention 9 février 2011
30 mars 2009 à 15:47
salut :
il s'agit d'une erreur de syntaxe "You have an error in your SQL syntax".
manque de l'accolad fermant de if .
$requete1="INSERT INTO requete1 VALUES (SELECT If
(........) )";
0
Rejoignez-nous