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 15/06/2011, 11h52   #1
Invité de passage
 
Homme John
Webdesigner
Inscription : juin 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme John
Âge : 28
Localisation : France, Drôme (Rhône Alpes)

Informations professionnelles :
Activité : Webdesigner
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2011
Messages : 3
Points : 3
Points : 3
Par défaut Question d'optimisation: Faire un Select avec une clef primaire sur plusieurs colonnes

Bonjour tout le monde.

Je cherche à savoir si il est possible de faire un Select avec une clef primaire sur plusieurs colonnes

C'est a dire:


Voici une table d'exemple fictive:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
CREATE TABLE IF NOT EXISTS `MaTable` (
  `Id_Societe` int(9) UNSIGNED NOT NULL,
  `Id_Type` varchar(40) collate utf8_unicode_ci NOT NULL,
  `Id_Photo` int(9) UNSIGNED NOT NULL  ,
  `Id_PhotosAlbum` int(9) UNSIGNED NOT NULL,
  `Id_SizeMode` varchar(40) collate utf8_unicode_ci NOT NULL,
 
  `NomFichier` varchar(255) collate utf8_unicode_ci NOT NULL,
  `PoidsOct` int(8) UNSIGNED DEFAULT NULL,
  `Width` int(4) UNSIGNED DEFAULT NULL,
  `Height` int(4) UNSIGNED DEFAULT NULL,
  `DateMake` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `DateModif` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
 
  PRIMARY KEY  (`Id_Societe`,`Id_Type`, `Id_Photo`,`Id_PhotosAlbum`, `Id_SizeMode`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci  ;
Admettons que je souhaite récupérer les informations d'une ligne dont j'ai la clef primaire

D’habitude je procède ainsi:
Code :
SELECT * FROM `MaTable` WHERE `Id_Societe` = 'MaValeur1' AND  `Id_Type`  = 'MaValeur2' AND  `Id_Photo`  = 'MaValeur3' AND  `Id_PhotosAlbum` = 'MaValeur4' AND  `Id_SizeMode`  = 'MaValeur5';
Cette requette me retourne une seule ligne et c'est normal, de plus c'est ce que je cherche à faire...

Ce que j'aimerais savoir c'est si il est possible de travailler directement sur la clef primaire

Voici un exemple:
Cet exemple et faux je le sais bien mais je cherche un equivalent
Code :
SELECT * FROM `MaTable` WHERE  PRIMARY KEY = ( 'MaValeur1','MaValeur2','MaValeur3','MaValeur4','MaValeur5') ;
Ou encore
Code :
SELECT * FROM `MaTable` WHERE  PRIMARY KEY = 'Une forme normalisé de la cléf' ;
anacronox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 14h02   #2
Membre éprouvé
 
Avatar de argoet
 
Inscription : mai 2002
Messages : 535
Détails du profil
Informations forums :
Inscription : mai 2002
Messages : 535
Points : 461
Points : 461
Si "le sous entendu est" puis je faire un Select "simplifié" sans avoir à renseigner les "n" colonnes de ma clef primaire alors la réponse est non

Vous pouvez cependant (je ne sais pas si cela est vrai sous MySQL) faire ceci

Code :
SELECT * FROM MaTable WHERE (Id_Societe,Id_Type,Id_Photo,Id_PhotosAlbum,id_SizeMode) = ( 'MaValeur1','MaValeur2','MaValeur3','MaValeur4','MaValeur5')
__________________
Signé : Capitaine Jean-Luc Picard
argoet est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/06/2011, 14h10   #3
Invité de passage
 
Homme John
Webdesigner
Inscription : juin 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Homme John
Âge : 28
Localisation : France, Drôme (Rhône Alpes)

Informations professionnelles :
Activité : Webdesigner
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2011
Messages : 3
Points : 3
Points : 3
Merci beaucoup Argoet, cette question restait en suspend et me tiraillé l'esprit de peur de passer à coté de quelque chose d'important.

merci aussi pour ta solution d'écriture plus propre

je passe le post en résolu
anacronox 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 21h09.


 
 
 
 
Partenaires

Hébergement Web