1

私は、moodle (2.4) データベースに基づいたシンプルなアプリを構築しています。データベースはmysql 5.1.69です

今月付与されたすべての証明書と、証明書を取得したユーザーと証明書自体に関するすべての関連情報を見つける必要があります。

現状の私のSQLは次のとおりです。

SELECT u.lastname, u.firstname, ln.data, lt.data, course.fullname,
    c.printhours, from_unixtime(i.timecreated) AS issued,
    substring_index(c.customtext, ' ', -1) AS approval
FROM mdl_certificate_issues AS i
INNER JOIN mdl_certificate AS c ON i.certificateid = c.id
INNER JOIN mdl_user AS u on i.userid = u.id
INNER JOIN mdl_course AS course ON c.course = course.id
INNER JOIN mdl_user_info_data AS ln ON i.userid = ln.userid AND ln.fieldid = 1
INNER JOIN mdl_user_info_data AS lt ON i.userid = lt.userid AND lt.fieldid = 2
WHERE i.timecreated >= unix_timestamp('2013-07-01')
    AND i.timecreated < unix_timestamp('2013-08-01')

同じテーブル (mdl_user_info_data) を 2 回 (lt と ln として) 結合し、同じ列を使用しているが、fieldid のみが異なるという事実が気になります。単一のサブクエリでそれを実行し、正しい情報を選択に取り込むことができるはずのように感じます-しかし、それを行う方法、またはそれが正しいアプローチであるかどうかはわかりません。

4

1 に答える 1

2

あなたのアプローチに問題はありません。個人的には、サブクエリよりも常に結合を選択しますが、おそらく "ln" や "lt" よりも意味のあるエイリアスを選択するでしょうが、

于 2013-08-02T23:21:12.493 に答える