Req SQL trop dure pour moi

Req SQL trop dure pour moi - SQL/NoSQL - Programmation

Marsh Posté le 28-09-2007 à 11:11:04    

Bonjour j'ai une table assez simple avec les colonnes suivantes :
 
 
login | information | valeur
         |_ statut     |_active, inactive
         |_role          |_commercial, secretaire...
          |_autre, etc..
information peut être de 3 sortes différentes et valeur de 'x' sortes différentes.
 
je veux les logins information valeur des comptes des commerciaux actifs (active) donc : information= statut et valeur = active
plus information = role et valeur = commercial
 
 
Wherexxxx
And where xxx ça existe pas ? c dommage..


Message édité par canardtichaud le 28-09-2007 à 11:16:19
Reply

Marsh Posté le 28-09-2007 à 11:11:04   

Reply

Marsh Posté le 28-09-2007 à 11:34:12    

euh...
 
(imbittable ton explication du problème)
 
mais la solution réside dans :

Code :
  1. WHERE champ1 = valeur1 AND champ2 = valeur2 AND champ3 = valeur3 ...


 
Révise ton algèbre ensembliste ainsi que ton algèbre de bool si tu comprends pas comment faire marcher ça avec une seule clause where ;)

Reply

Marsh Posté le 28-09-2007 à 11:57:27    

Merci, c pas ce que je veux exactement mais en fait ce sera trop compliqué et trop long à expliquer

Reply

Marsh Posté le 28-09-2007 à 12:03:00    

si c'est trop long à expliquer, tu dois sûrement avoir une erreur dans ta requête sql à la ligne 3

Reply

Marsh Posté le 28-09-2007 à 12:08:04    

mdr.
 
si tu prends pas le temps de nous expliquer correctement ton truc, qu'est-ce que tu attends de nous ?
 
qu'on te donne la réponse après une lecture intense dans notre boule de crystal ?
 
et quand t'as un problème, la règle numéro un, c'est de prendre le temps de le poser clairement.
 
je ne compte pas le nombre de fois où au moment de valider une question sur ce forum je me dis "ah ben oui tiens, et si j'essayais comme ça ?"
 
un problème correctement expliqué, c'est un problème compris. à partir de là, il est à 90% résolu, les 10% restants représentant uniquement des problèmes techniques.
 
là j'ai l'impression que tu ne maîtrises même pas ce que tu veux faire.
 
bref, prends le temps d'expliquer ton problème.


Message édité par MagicBuzz le 28-09-2007 à 12:08:21
Reply

Marsh Posté le 28-09-2007 à 12:10:30    

ps : après avoir relu 25 fois ton problème qui est extrêment mal posé (parceque langage totalement imbittable, malgré un schéma -plus confusant qu'autrechose-) je pense avoir pigé ce que tu veux faire.
 
il te faut une auto-jointure.
 
je ne t'en dis pas plus tant que t'as pas posé clairement ton problème.
déjà, y'a une information extrêment important que t'as pas été foutu de nous donner, que j'ai dû déduire de ton modèle.

Reply

Marsh Posté le 04-10-2007 à 17:05:44    

Autre requête complexe, pour laquelle je vais essayer quant à moi d'être clair :
 
J'ai une table de titres (titre) :
id_titre, id_auteur, label_titre, categorie, date
 
J'ai une table d'auteurs (auteur) :
id_auteur, prenom, nom
 
Pour extraire tous les titres + auteurs, je peux faire :
SELECT `categorie`, `prenom`, `nom`, `label_titre`, `date` FROM `titre` JOIN `auteur` WHERE titre.id_auteur = auteur.id_auteur;
ou
SELECT `categorie`, `prenom`, `nom`, `label_titre`, `date` FROM `titre` LEFT JOIN `auteur` ON titre.id_auteur = auteur.id_auteur;
 
Après, ça se complique...
 
J'ai une table d'utilisateurs (user) :
id_user, nom_user, ... ( + âge, sexe, ou n'importe quoi d'autre)
 
J'ai une table qui attribue zéro, un ou plusieurs titres à chaque utilisateur (caddy):
id_titre, id_user
 
Je veux récupérer pour un utilisateur donné ce qui lui est attribué. Par exemple nom_user Toto dispose des id_titre 1, 3, 5, 7, 11 et 17
(nom_user Titi peut disposer quant à lui des id_titre 1, 3, 5, 6, 7, 8 et 17).
 
Le résultat de la requête doit me renvoyer les champs
categorie, prenom, nom, label_titre, date pour un id_user donné.
(Les utilisateurs d'un titre donné ne m'intéressent pas).
 
En une seule requête, sous mysql, pour l'instant je coince. (Ce qui ne m'empêche pas de continuer à chercher).
Merci d'avance à qui me mettra sur la bonne voie.
 

Reply

Marsh Posté le 04-10-2007 à 17:24:31    

A. Point de vue mise en forme
1/ Indente tes requête : un saut de ligne avant "FROM", un saut de ligne avant chaque jointure, un saut de ligne avant "WHERE" et un saut de ligne avant chaque "AND" dans ta clause WHERE
2/ N'utilise le signe ` que lorsqu'il est nécessaire (ici, nulle part)
3/ Utilise la balise [ code=sql] pour écrire une requête SQL, c'est plus lisible que du texte en gras
 
B. Point de vue synaxe
1/ C'est "INNER JOIN" ou "LEFT OUTER JOIN" mais pas "JOIN" ou "LEFT JOIN"
2/ Une clause de jointure attends le paramètre "ON" qui défini les critères de jointures. Seul "CROSS JOIN" déroge à la règle. Ta requête planterait sous SQL Server ou Oracle par exemple, car syntaxiquement fausse
3/ Préfixe toujours les champs dans ta clause "SELECT". C'est plus facile de comprendre d'où vient un champ quand il est correctement préfixé
 
C. Point de vue algorithmie
1/ C'est INNER JOIN ou LEFT OUTER JOIN. C'est à toi de décider s'il existe des titres sans auteur, et si tu veux retrouver ces éventuels titres. C'est pas "p'tête ben qu'oui, p'tête ben qu'non".
 
D. La solution
Bah c'est pourtant pas compliqué...
 

Code :
  1. SELECT t.categorie, a.prenom, a.nom, t.label_titre, t.date
  2. FROM user u
  3. INNER JOIN caddy c ON c.user_id = u.user_id
  4. INNER JOIN titre t ON t.id_titre = c.id_titre
  5. INNER JOIN auteur a ON a.id_auteur = t.id_auteur
  6. WHERE u.nom_user = 'kiosquec';


 
:spamafote:

Reply

Marsh Posté le 04-10-2007 à 17:29:21    

Merci, je regarde ce que ça donne. (LEFT JOIN, c'est ce que j'ai dans mon bouquin PHP et MYSQL)
 
------
 
Ca marche, et en plus ça a l'air simple. Je pense que c'est mon bouquin qui est TROP simple. La suite, c'est de convertir tout ça en PHP et là, normalement, je sais faire.
 
PS : Les signes ` c'est la faute à phpmyadmin. Quand j'exporte une table, il en colle partout, alors je fais pareil pour lui faire plaisir. Tous comptes faits, heureusement que phpmyadmin ne saute pas dans le vide... [:kiosquec]
 
PPS : Une bonne doc MYSQL pour débuter correctement et sans trop de prise de tête, y en a-t-il une à recommander en ligne, parmi toutes celles qu'on y trouve ?
 


Message édité par Kiosquec le 04-10-2007 à 17:53:04
Reply

Marsh Posté le 04-10-2007 à 17:32:58    

Ben jette ton bouquin.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed