Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/08/2011, 20h32   #1
Invité de passage
 
Homme
Inscription : août 2011
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2011
Messages : 8
Points : 2
Points : 2
Par défaut comparaison valeurs colonne sur une même table

Bonjour,

J’ai une table mysql que l’on nommera « TOTO ».
Elle est composée de x colonnes de différentes valeurs.

OBJECTIF : afficher à l’aide d’une requête toutes les valeurs contenues dans la colonne que l’on nommera « A » sauf celles liées à une valeur unique contenue, elle, dans la colonne que l’on nommera « B »

EXEMPLE :

colonne A........colonne B

albert……………….non
pedro

nono………………..ok
nono
durand
durand……………..aaa
durand……………..non

pierre……………….ok
pierre
andré………………ok
andré………………eeee
paolo
doni


La requête ci-dessous :
Code php :
1
2
3
4
$query = "select * from TOTO group by A";
$result=mysql_query($query);
while($i=mysql_fetch_array($result))
{
… affiche bien toutes les valeurs uniques contenues dans la colonne A sans exception !

Mais je coince pour n’afficher QUE les valeurs : albert, pedro, durand, paolo et doni qui sont les seules valeurs (même si ces dernières sont répétées plusieurs fois) à ne faire aucunement référence à la valeur « ok » de la colonne B !

Merci d'avance pour votre précieuse aide !
nsylvain10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 01h08   #2
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Si colonneA est NOT NULL :
Code :
1
2
3
SELECT DISTINCT colonneA
  FROM toto
 WHERE colonneA NOT IN (SELECT colonneA FROM toto WHERE colonneB = 'OK')
Sinon utilise NOT EXISTS ou filtre la sous-requête avec colonneA IS NOT NULL
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 02h03   #3
Invité de passage
 
Homme
Inscription : août 2011
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2011
Messages : 8
Points : 2
Points : 2
Merci pour ta réponse skuatamad mais étonnamment ça ne fonctionne pas comme prévu. Et pourtant j'ai tout essayé mais RIEN ne s'affiche !!! Pourquoi ?

Pourtant ta requête devrait normalement fonctionner !
nsylvain10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 10h25   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 008
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 008
Points : 18 280
Points : 18 280
Envoyer un message via MSN à CinePhil
Étant donné que tu n'as pas donné la vraie structure de ta table mais une abstraction, peut-être as-tu mal retranscrit la requête qui t'a été proposée ?

Donne la vraie structure et la vraie requête, ce sera plus facile.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 10h54   #5
Invité de passage
 
Homme
Inscription : août 2011
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2011
Messages : 8
Points : 2
Points : 2
Bonjour CinePhil,

voilà la vraie requête comme me l'a proposé skuatamad (pourtant correcte) et qui malheureusement n'affiche aucune valeur :

Code :
1
2
3
4
$select=mysql_query("select distinct scategorie from rapidachats_categorie where scategorie not in (select scategorie from rapidachats_categorie where boutique='$boutique')");
while ($i=mysql_fetch_array($select))
{
$scategorie=$i[scategorie];
et voilà le contenu de ma table :


l'objectif étant d'afficher par la requête TOUTES les valeurs de $scategorie SAUF celles liées avec une valeur de la colonne $boutique (dans l'exemple il s'agit de 1001Bijoux).

Après quantités d'essais je n'arrive pas à avoir une liste affichée avec toutes les valeurs de $scategorie mais SANS qu’apparaissent : Beauté, Artisanat, Décoration et Enchère !

Il me semble qu'il y a un problème avec les cases vides (IS NULL ou IS NOT NULL ??) !!

Merci encore à vous pour prendre du temps à résoudre mon problème de requête.
nsylvain10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 11h05   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 008
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 008
Points : 18 280
Points : 18 280
Envoyer un message via MSN à CinePhil
Essaie cette requête :
Code :
1
2
3
4
5
6
7
8
9
SELECT DISTINCT scategorie
FROM rapidachats_categorie r1
WHERE NOT EXISTS
(
    SELECT *
    FROM rapidachats_categorie r2
    WHERE r2.scategorie = r1.scategorie
        AND r2.boutique = '1001Bijoux'
)
Traduction en français :
Sélectionner les scategorie pour lesquelles il n'existe pas de ligne dont la boutique est 1001Bijoux.

Ça répond à ton besoin ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 11h31   #7
Invité de passage
 
Homme
Inscription : août 2011
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2011
Messages : 8
Points : 2
Points : 2
désolé CinePhil mais rien ne s'affiche :

Code :
1
2
3
4
$select=mysql_query("select distinct scategorie from rapidachats_categorie r1 where not exists (select * from rapidachats_categorie r2 where r2.scategorie = r1.scategorie and r2.boutique = '1001Bijoux')");
while ($i=mysql_fetch_array($select))
{
$scategorie=$i[scategorie];
à quoi correspondent les r1 et r2 dans ta requête ?

Merci...
nsylvain10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 11h43   #8
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 008
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 008
Points : 18 280
Points : 18 280
Envoyer un message via MSN à CinePhil
Essaie la requête dans phpMyAdmin, elle fonctionne.

Je viens de faire ceci :
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
CREATE TABLE `rapidachats_categorie` (
  `scategorie` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
  `boutique` varchar(30) COLLATE utf8_unicode_ci DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
 
INSERT INTO `rapidachats_categorie` (`scategorie`, `boutique`) VALUES
('Assurance', NULL),
('Bonne affaire', NULL),
('Crédit', NULL),
('Gain', NULL),
('Gratuit', NULL),
('Occasion', NULL),
('Finance', NULL),
('Accessoire', NULL),
('Distributeur', NULL),
('Alimentation', NULL),
('Beauté', NULL),
('Artisanat', NULL),
('Décoration', NULL),
('Enchère', NULL),
('Jeu', 'Avenue des jeux'),
('Jouet', 'Avenue des jeux'),
('Assurance', 'Avenue des jeux'),
('Assurance', 'Assurland'),
('Beauté', '1001Bijoux'),
('Artisanat', '1001Bijoux'),
('Décoration', '1001Bijoux'),
('Enchère', '1001Bijoux');
Et la requête donne ce résultat :
Citation:
scategorie
Assurance
Bonne affaire
Crédit
Gain
Gratuit
Occasion
Finance
Accessoire
Distributeur
Alimentation
Jeu
Jouet
r1 et r2 sont des alias pour les deux instances de la table afin d'éviter de répéter ce (long) nom de table.

Au passage, tu devrais revoir ton modèle de données et externaliser les scategorie, boutique, categorie... bref, tout ce qui est redondant.
Et est-il nécessaire de stocker certaines données textuelles dans des colonnes de type TEXT ? Ces données font-elles plus de 255 caractères ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/08/2011, 15h42   #9
Invité de passage
 
Homme
Inscription : août 2011
Messages : 8
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : août 2011
Messages : 8
Points : 2
Points : 2
Merci CinePhil et également skuatamad pour vos conseils qui m'ont enfin permis de résoudre mon problème..

En fait en faisant plusieurs essais je me suis aperçu que la requête fonctionnait dans phpMyAdmin mais sous la version MySQL5.0 et non avec MySQL4.0. Je viens de migrer avec la version MySQL5.0 et là tout fonctionne parfaitement !
Merci encore d'avoir consacré une partie de votre précieux temps.
nsylvain10 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h30.


 
 
 
 
Partenaires

Hébergement Web