2
私はスクリプトを最適化しようとしています。これは在庫写真のウェブサイト用であり、WHILE WENDループを使用して画像の大きなグリッドを表示し、DB(MySQL)テーブルの写真をループして表示します。従来のASP - 結合と引き換えにネストループを失うことはできますか?
このループの中に、私の人のテーブルから各写真の中の人々の名前を取得する別のWHILE ENDループがあります。
私の主な質問にJOINを追加することで、この2番目のWHILE WENDループを失うことはできますか?
私の混乱は、複数の人を返すことに由来します。 1つ以上の名前をコンマで区切って取得する方法を理解できません。わかりません。たぶん私のスクリプトは大丈夫ですが、入れ子にされたループがなければすばやくできると確信しています。なぜなら、ある時点では、各写真の最初の5つのキーワードを返す別のクエリを追加し、別のループを追加したい!
スクリーンショット
MY擬似コード
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
WOW、おかげでたくさん!それは私の以前の方法よりも効果的に機能しています。あなたが私にGROUP_CONCATを導入してうれしいです。私はこれのために多くの場所を持っています。また、私のORDER BY人の条件に注意を払い、コンカット関数セパレータにスペースとカンマ(、)を追加してくれてありがとう。素晴らしい答え! – TheCarver
非常に便利な機能ですが、GROUP_CONCATによって返される文字列の長さは、システム変数group_concat_max_lenによって制限されることに注意する必要があります。 – nnichols
私がチェックしたのは:私の場合、デフォルト値は1枚の写真の人数の最大値が4であるので十分なはずです(1024)。私はこの変数を変更できないように共有ホスティングを使用しています。私は他のプロジェクトでこれを頭に入れています。ありがとう。 – TheCarver