J'ai deux instructions de sélection que je voudrais combiner en une seule, bien que je n'aie besoin que des informations d'un champ dans la deuxième instruction select (Le champ data
de user_info_data). Les champs dont j'ai besoin sont Firstname, lastname, email, cours fullname, role, et le champ data
où fieldid = '15'. La première instruction select me donnera tout sauf le champ de données. Et la seconde me donne tout sauf le cours. J'ai essayé de faire la deuxième instruction select similaire au champ Rôle mais il se plaint de renvoyer plus d'une ligne. Si j'essaie d'utiliser le nom du cours sans la partie fieldid = '15 ', cela amène plus de 100k enregistrements (chaque utilisateur apparaît dans chaque cours et toutes ses données).Plusieurs jointures mysql, comment combiner ces deux statuts
Les champs pour les tables:
user(id,auth,confirmed,policyagreed,username,password,idnumber,firstname,lastname,email,phone etc..)
user_info_data(id,userid,fieldid,data)
role(id,name,shortname,description,sortorder)
role_assignments(id,roleid,contextid,userid...)
context(id,contextlevel,instanceid,path,depth)
Première déclaration:
SELECT user.firstname AS Firstname, user.lastname AS Lastname, user.email AS Email, course.fullname AS Course, role.name AS Role
FROM user AS user, course AS course,role,role_assignments AS asg
INNER JOIN context AS context ON asg.contextid=context.id
WHERE context.contextlevel = 50
AND role.id=asg.roleid
AND user.id=asg.userid
AND context.instanceid=course.id
sortie de la première stament:
Prénom Nom Email Cours Rôle
John Doe john.doe @ email.com Course-N amme étudiants
Deuxième déclaration:
SELECT user.firstname AS 'First Name', user.lastname AS 'Last Name', user.email AS 'Email', user_info_data.data AS 'IBCLC Certified'
FROM user, user_info_data
WHERE user.id = user_info_data.userid
AND fieldid = '15'
sortie de seconde stament:
Prénom Nom Email IBCLC certifié
John Doe [email protected] Oui
Sortie souhaitée:
FirstName, LastName, E-mail, IBCLC certifié, Cours, Rôle
Autre instruction select J'ai essayé: Amène 9,494 dossiers, mais maintenant les données sur le terrain où fieldid est 15 est une liste de choix possibles, pourrait c'est pourquoi?
SELECT user.firstname AS Firstname, user.lastname AS Lastname, user.email AS Email, userdata.data, course.fullname AS Course, role.name AS Role
FROM user AS user, course AS course, user_info_data AS userdata, role,role_assignments AS asg
INNER JOIN context AS context ON asg.contextid=context.id
WHERE context.contextlevel = 50
AND userdata.fieldid = 15
AND role.id=asg.roleid
AND user.id=asg.userid
AND context.instanceid=course.id
Sur vos instructions select, vous avez essayé, pourquoi ne pas simplement ajouter 'role' à votre clause FROM au lieu d'utiliser une instruction select intégrée? – northpole
@northpole Cela fonctionne, et apporte les mêmes résultats que la première instruction, mais je ne sais toujours pas comment obtenir le champ 'data' où fieldid = 15, sans avoir 113974 enregistrements; il ne devrait y avoir que 94. – Jonathan
@johathan - dites-vous qu'il n'y a que 94 lignes où fieldid = 15? C'est la seule chose avec laquelle vous réduisez cette table. Devrait-il se joindre à dire utilisateurs par userid? Il me semble que vous pourriez manquer une clause where supplémentaire. – northpole