1 つに結合したい 2 つの select ステートメントがありますが、実際には 2 番目の select ステートメント ( data
user_info_data のフィールド) の 1 つのフィールドからの情報のみが必要です。必要なフィールドは、Firstname、lastname、email、コースのフルネーム、役割、およびdata
fieldid = '15' のフィールドです。最初の select ステートメントは、データ フィールド以外のすべてを提供します。そして2番目はコース以外のすべてを教えてくれます。Role フィールドに似た 2 番目の select ステートメントを実行しようとしましたが、複数の行が返されると不平を言います。fieldid='15' 部分なしでコース名を使用しようとすると、100k を超えるレコードが表示されます (各ユーザーは各コースとそのすべてのデータに表示されます)。
テーブルのフィールド:
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)
最初のステートメント:
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
最初のステートメントの出力:
ファーストネーム ラストネーム メール コースの役割
John Doe john.doe@email.com コース名 学生
2 番目のステートメント:
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'
2 番目のステートメントの出力:
ファーストネーム ラストネーム Eメール IBCLC認定
John Doe john.doe@email.com はい
望ましい出力:
名、姓、電子メール、IBCLC認定、コース、役割
私が試したその他の select ステートメント: 9,494 レコードを表示しますが、現在、fieldid が 15 であるフィールド データは可能な選択肢のリストです。それはなぜでしょうか?
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