Problème de requête

Mammouth du PHP | 19672 Messages

12 mai 2006, 16:42

Bon allez, je te remets tout ça proprement : attention, j'ai du faire quelques modifications dans certains types de champs pour la cohérence de l'ensemble :
LES TABLES :

Code : Tout sélectionner

magasin; +---------------+-----------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------------+-----------------+------+-----+---------+-------+ | nom_mag | char(32) | NO | | NULL | | | matricule_mag | int(4) unsigned | NO | PRI | NULL | | | adresse | char(75) | NO | | NULL | | +---------------+-----------------+------+-----+---------+-------+ lieux; +-----------------+-----------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------------+-----------------+------+-----+---------+-------+ | matricule_lieux | int(6) unsigned | NO | PRI | NULL | | | matricule_mag | int(4) unsigned | NO | | NULL | | | adresse | char(75) | NO | | NULL | | +-----------------+-----------------+------+-----+---------+-------+ responsable; +-------------+------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------+------------------+------+-----+---------+-------+ | num_pers | int(11) unsigned | NO | PRI | NULL | | | nom_pers | char(32) | NO | | NULL | | | prenom_pers | char(32) | NO | | NULL | | +-------------+------------------+------+-----+---------+-------+ represente; +---------------+---------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------------+---------------------+------+-----+---------+-------+ | num_pers | tinyint(4) unsigned | NO | PRI | NULL | | | matricule_mag | int(4) unsigned | NO | PRI | NULL | | | categorie | char(32) | NO | | NULL | | +---------------+---------------------+------+-----+---------+-------+ represente2; +-----------------+---------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------------+---------------------+------+-----+---------+-------+ | num_pers | tinyint(4) unsigned | NO | PRI | NULL | | | matricule_lieux | int(6) unsigned | NO | PRI | NULL | | | categorie | char(32) | NO | | NULL | | +-----------------+---------------------+------+-----+---------+-------+
DONNEES :

Code : Tout sélectionner

responsable; +----------+----------+-------------+ | num_pers | nom_pers | prenom_pers | +----------+----------+-------------+ | 1 | Dupond | Pierre | | 2 | Dupont | Paul | | 3 | Faure | Jacques | | 4 | Moreau | François | +----------+----------+-------------+ magasin; +-----------+---------------+---------+ | nom_mag | matricule_mag | adresse | +-----------+---------------+---------+ | Auchan | 1 | Paris | | Carrefour | 2 | Paris | | Casino | 3 | Lille | | Cora | 4 | Nantes | +-----------+---------------+---------+ lieux; +-----------------+---------------+----------+ | matricule_lieux | matricule_mag | adresse | +-----------------+---------------+----------+ | 1 | 1 | Poitiers | | 2 | 1 | Limoges | | 3 | 2 | Nantes | | 4 | 3 | Poitiers | | 5 | 3 | Paris | +-----------------+---------------+----------+ represente; +----------+---------------+------------+ | num_pers | matricule_mag | categorie | +----------+---------------+------------+ | 1 | 1 | Directeur | | 3 | 2 | Commercial | +----------+---------------+------------+ represente2; +----------+-----------------+-----------+ | num_pers | matricule_lieux | categorie | +----------+-----------------+-----------+ | 1 | 1 | Comptable | | 3 | 2 | Directeur | +----------+-----------------+-----------+
LA REQUETE :

Code : Tout sélectionner

mysql> SELECT DISTINCT(responsable.num_pers), nom_pers, prenom_pers, nom_mag -> FROM responsable, represente, represente2, lieux, magasin -> WHERE ( -> (responsable.num_pers = represente.num_pers -> AND represente.matricule_mag = magasin.matricule_mag) -> OR(responsable.num_pers = represente2.num_pers -> AND represente2.matricule_lieux = lieux.matricule_lieux -> AND lieux.matricule_mag = magasin.matricule_mag) -> ) -> AND nom_pers LIKE 'Dupond%' -> ORDER BY nom_pers ASC; +----------+----------+-------------+---------+ | num_pers | nom_pers | prenom_pers | nom_mag | +----------+----------+-------------+---------+ | 1 | Dupond | Pierre | Auchan | +----------+----------+-------------+---------+
Attention, c'est sensible à la casse, donc si tu mets 'Dupond%', ça va passer, si tu mets 'dupond%', tu n'auras rien.

Enjoy! ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Cécile85
Invité n'ayant pas de compte PHPfrance

12 mai 2006, 16:53

Bon là je ne comprend vraiment rien, toi ça marche et moi rien. ça me fait toujours la même chose, c'est a dire rien, pas d'erreur, pas de résultat.

Cécile85
Invité n'ayant pas de compte PHPfrance

12 mai 2006, 16:55

je tiens à te remercier pour tout le temps que tu as passer a m'aider, il y en a beaucoup qui aurai laisser tomber. Donc MERCI

Mammouth du PHP | 19672 Messages

12 mai 2006, 16:58

Observe bien les structures, je t'ai reproduit directement ce qui sort de MySQL et comme je t'ai dit, j'ai dû modifier quelques détails (types de champs et j,ai mis tous les noms de colonnes en minuscule.

Tiens, en bonus, je te mets le script de création :

Code : Tout sélectionner

-- phpMyAdmin SQL Dump -- version 2.8.0-rc1 -- http://www.phpmyadmin.net -- -- Serveur: localhost -- Généré le : Vendredi 12 Mai 2006 à 16:56 -- Version du serveur: 5.0.21 -- Version de PHP: 5.1.4 -- -- Base de données: `test` -- -- -------------------------------------------------------- -- -- Structure de la table `lieux` -- DROP TABLE IF EXISTS `lieux`; CREATE TABLE IF NOT EXISTS `lieux` ( `matricule_lieux` int(6) unsigned NOT NULL, `matricule_mag` int(4) unsigned NOT NULL, `adresse` char(75) binary NOT NULL, PRIMARY KEY (`matricule_lieux`) ) TYPE=MyISAM; -- -- Contenu de la table `lieux` -- INSERT INTO `lieux` (`matricule_lieux`, `matricule_mag`, `adresse`) VALUES (1, 1, 'Poitiers'), (2, 1, 'Limoges'), (3, 2, 'Nantes'), (4, 3, 'Poitiers'), (5, 3, 'Paris'); -- -------------------------------------------------------- -- -- Structure de la table `magasin` -- DROP TABLE IF EXISTS `magasin`; CREATE TABLE IF NOT EXISTS `magasin` ( `nom_mag` char(32) binary NOT NULL, `matricule_mag` int(4) unsigned NOT NULL, `adresse` char(75) binary NOT NULL, PRIMARY KEY (`matricule_mag`) ) TYPE=MyISAM; -- -- Contenu de la table `magasin` -- INSERT INTO `magasin` (`nom_mag`, `matricule_mag`, `adresse`) VALUES ('Auchan', 1, 'Paris'), ('Carrefour', 2, 'Paris'), ('Casino', 3, 'Lille'), ('Cora', 4, 'Nantes'); -- -------------------------------------------------------- -- -- Structure de la table `represente` -- DROP TABLE IF EXISTS `represente`; CREATE TABLE IF NOT EXISTS `represente` ( `num_pers` tinyint(4) unsigned NOT NULL, `matricule_mag` int(4) unsigned NOT NULL, `categorie` char(32) binary NOT NULL, PRIMARY KEY (`num_pers`,`matricule_mag`) ) TYPE=MyISAM; -- -- Contenu de la table `represente` -- INSERT INTO `represente` (`num_pers`, `matricule_mag`, `categorie`) VALUES (1, 1, 'Directeur'), (3, 2, 'Commercial'); -- -------------------------------------------------------- -- -- Structure de la table `represente2` -- DROP TABLE IF EXISTS `represente2`; CREATE TABLE IF NOT EXISTS `represente2` ( `num_pers` tinyint(4) unsigned NOT NULL, `matricule_lieux` int(6) unsigned NOT NULL, `categorie` char(32) binary NOT NULL, PRIMARY KEY (`num_pers`,`matricule_lieux`) ) TYPE=MyISAM; -- -- Contenu de la table `represente2` -- INSERT INTO `represente2` (`num_pers`, `matricule_lieux`, `categorie`) VALUES (1, 1, 'Comptable'), (3, 2, 'Directeur'); -- -------------------------------------------------------- -- -- Structure de la table `responsable` -- DROP TABLE IF EXISTS `responsable`; CREATE TABLE IF NOT EXISTS `responsable` ( `num_pers` int(11) unsigned NOT NULL, `nom_pers` char(32) binary NOT NULL, `prenom_pers` char(32) binary NOT NULL, PRIMARY KEY (`num_pers`) ) TYPE=MyISAM; -- -- Contenu de la table `responsable` -- INSERT INTO `responsable` (`num_pers`, `nom_pers`, `prenom_pers`) VALUES (1, 'Dupond', 'Pierre'), (2, 'Dupont', 'Paul'), (3, 'Faure', 'Jacques'), (4, 'Moreau', 'François');
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Cécile85
Invité n'ayant pas de compte PHPfrance

12 mai 2006, 17:02

ok merci, je verrai ça lundi, je dois partir du taf.

merci, bon week end

Cécile85
Invité n'ayant pas de compte PHPfrance

12 mai 2006, 17:05

juste pour savoir c'est quoi unsigned
merci

Mammouth du PHP | 19672 Messages

12 mai 2006, 17:17

un entier non signé sera toujours positif, tandis que signé comportera des valeurs négatives ou positives.

Voir ici dans la doc
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: