par
alexbob » 06 juin 2010, 10:49
JE place la Table pour que ce soit plus facile à comprendre :
CREATE TABLE IF NOT EXISTS `rayons_filtres` (
`id_rayons_filtres` int(11) NOT NULL auto_increment,
`id_rayon` int(11) NOT NULL,
`id_filtre` int(11) NOT NULL,
`type` varchar(255) NOT NULL,
`id_boutique` int(11) NOT NULL,
`id_compte` int(11) NOT NULL,
PRIMARY KEY (`id_rayons_filtres`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=16 ;
INSERT INTO `rayons_filtres` (`id_rayons_filtres`, `id_rayon`, `id_filtre`, `type`, `id_boutique`, `id_compte`) VALUES
(6, 53129, 6, 'marque', 67, 1),
(7, 53129, 7, 'modele', 67, 1),
(11, 53130, 6, 'marque', 67, 1),
(12, 53130, 7, 'modele', 67, 1),
(14, 53130, 10, 'age', 67, 1);
Je t'explique :
Si je veux sélectionner TOUT les "id_rayon" en fonction des valeurs d'une seule et même colonne ( ):
Mettons toujours dans cet exemple que veuillez tout les id_rayons unique quand id_filtre = 6
SELECT *
FROM rayons_filtres
WHERE id_filtre =6
GROUP BY id_rayon
LIMIT 0 , 30
Résultat ok, j'ai bien ce que je veux.
Maintenant j'ai besoin de sélectionner tout les résultats quand id_filtre = 6 et aussi 7
( avec un AND ca ne marchera pas ! Donc je fais un XOR... logique)
SELECT *
FROM rayons_filtres
WHERE id_filtre =6
XOR id_filtre =7
GROUP BY id_rayon
LIMIT 0 , 30
Le resultat est correcte, mais si j'ajoute maintenant une autre spécification :
SELECT *
FROM rayons_filtres
WHERE id_filtre =6
XOR id_filtre =7
XOR id_filtre = 10
GROUP BY id_rayon
LIMIT 0 , 30
Logiquement, si tu observe le contenu de la table, seul l'id rayon ( 53130)
possède un id_filtre = 6, un id_filtre = 7, et un id_filtre = 10.
Logiquement mysql ne renvois que lui. Pourtant ca n'est pas le cas ... Pourquoi ?
Même requête avec la commande IN ( 6, 7, 10 ) = Même résultat faux.
JE place la Table pour que ce soit plus facile à comprendre :
[sql]
CREATE TABLE IF NOT EXISTS `rayons_filtres` (
`id_rayons_filtres` int(11) NOT NULL auto_increment,
`id_rayon` int(11) NOT NULL,
`id_filtre` int(11) NOT NULL,
`type` varchar(255) NOT NULL,
`id_boutique` int(11) NOT NULL,
`id_compte` int(11) NOT NULL,
PRIMARY KEY (`id_rayons_filtres`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=16 ;
INSERT INTO `rayons_filtres` (`id_rayons_filtres`, `id_rayon`, `id_filtre`, `type`, `id_boutique`, `id_compte`) VALUES
(6, 53129, 6, 'marque', 67, 1),
(7, 53129, 7, 'modele', 67, 1),
(11, 53130, 6, 'marque', 67, 1),
(12, 53130, 7, 'modele', 67, 1),
(14, 53130, 10, 'age', 67, 1);
[/sql]
Je t'explique :
Si je veux sélectionner TOUT les "id_rayon" en fonction des valeurs d'une seule et même colonne ( ):
Mettons toujours dans cet exemple que veuillez tout les id_rayons unique quand id_filtre = 6
[sql]SELECT *
FROM rayons_filtres
WHERE id_filtre =6
GROUP BY id_rayon
LIMIT 0 , 30
[/sql]
Résultat ok, j'ai bien ce que je veux.
Maintenant j'ai besoin de sélectionner tout les résultats quand id_filtre = 6 et aussi 7
( avec un AND ca ne marchera pas ! Donc je fais un XOR... logique)
[sql]SELECT *
FROM rayons_filtres
WHERE id_filtre =6
XOR id_filtre =7
GROUP BY id_rayon
LIMIT 0 , 30[/sql]
Le resultat est correcte, mais si j'ajoute maintenant une autre spécification :
[sql]
SELECT *
FROM rayons_filtres
WHERE id_filtre =6
XOR id_filtre =7
XOR id_filtre = 10
GROUP BY id_rayon
LIMIT 0 , 30
[/sql]
Logiquement, si tu observe le contenu de la table, seul l'id rayon ( 53130)
possède un id_filtre = 6, un id_filtre = 7, et un id_filtre = 10.
Logiquement mysql ne renvois que lui. Pourtant ca n'est pas le cas ... Pourquoi ?
Même requête avec la commande IN ( 6, 7, 10 ) = Même résultat faux.