スクリプトの1つを最適化しようとしています。これはストックフォトのWebサイト用であり、WHILE WENDループを使用して画像の大きなグリッドを表示し、写真のDB(MySQL)テーブルをループします。
このループ内には、別のWHILE ENDループがあり、各写真内の人の名前を人のテーブルから取得します。
私の質問は、プライマリクエリにJOINを追加することで、この2番目のWHILE WENDループを失うことができますか?
私の混乱は、複数の人を返すことから来ています。1つまたは複数の名前をコンマで区切る方法がわかりません。わかりません。私のスクリプトはそのままでも問題ないかもしれませんが、ネストされたループがないともっと速くなると確信しています。ある時点で、写真ごとに最初の5つのキーワードを返す別のクエリを追加することを考えているからです。別のループを追加したい!
スクリーンショット
私の疑似コード
Set rsPhotos = Conn.Execute(" " _
& "SELECT photoID, setID, caption, dateCreated, dateUploaded " _
& "FROM photos ORDER BY dateCreated DESC;)"
While NOT rsPhotos.EOF
Response.Write "<div>"
Response.Write "<img src=""photo.jpg"">"
Response.Write "<p>"
people_str = ""
Set rsPeople = Conn.Execute("SELECT p.person FROM photoPeople AS pp " _
& "LEFT JOIN people AS p USING (personID) " _
& "WHERE pp.photoID = "&rsPhotos.Fields("photoID")&" " _
& "ORDER BY p.person ASC;")
While NOT rsPeople.EOF
people_str = people_str & ", " & rsPeople.Fields("person")
rsPeople.MoveNext
Wend
rsPeople.Close
Response.Write Mid(people_str,3)
Response.Write "</p>"
Response.Write "<div>"
rsPhotos.MoveNext
Wend
rsPhotos.Close
DBスキーマ
PHOTOS tbl
photoID | INT 9
setID | INT 9
caption | VARCHAR2000
dateCreated | DATETIME
dateUploaded | DATETIME
PHOTOPEOPLE tbl
photoID | INT 9
personID | INT 7
PEOPLE tbl
personID | INT 7
person | VARCHAR 100