2

だから、私は意図したとおりに機能しているPHPでこのクエリを持っています:

SELECT files.ID, 
       files.Name,
       files.Downloads, 
       if (dlratings.userID IS NULL,0,r.vote) AS has_voted
FROM files
LEFT JOIN dlratings
   ON (files.ID = dlratings.fileID AND dlratings.userID = $userID)
WHERE files.Temporary != 1 AND files.Type = $type AND files.Cat_1 = $cat_1 
ORDER BY files.rating DESC, files.DateOrder DESC

ここで問題が発生します。これらの選択したファイルが関連付けられているタグも選択したいと思います。私はtoxiメソッドを使用しています。つまり、行を含む「tagmap」というテーブルがあり、行file_idと。tag_idを含むテーブル「tags」がありtag_idますtag_name

ファイルが1つしかないページに必要なタグを一覧表示するには、次のクエリを使用します。

SELECT files.Name,
       GROUP_CONCAT(tags.tag_name ORDER BY tags.tag_name SEPARATOR ', ') AS tags
FROM files
LEFT JOIN tagmap
   ON tagmap.file_id = files.ID
LEFT JOIN tags
   ON tagmap.tag_id = tags.tag_id
WHERE files.ID = $fileID

最初のクエリで提供されたリストにタグを表示できるように、2つを組み合わせるにはどうすればよいですか?

これは私が試したものですが、1つの結果しか得られません:

SELECT files.ID, 
       files.Name,
       files.Downloads,
       GROUP_CONCAT(tags.tag_name ORDER BY tags.tag_name SEPARATOR ', ') AS tags
       if (dlratings.userID IS NULL,0,r.vote) AS has_voted
FROM files
LEFT JOIN tagmap
   ON tagmap.file_id = files.ID
LEFT JOIN tags
   ON tagmap.tag_id = tags.tag_id
LEFT JOIN dlratings
   ON (files.ID = dlratings.fileID AND dlratings.userID = $userID)
WHERE files.Temporary != 1 AND files.Type = $type AND files.Cat_1 = $cat_1 
ORDER BY files.rating DESC, files.DateOrder DESC

これらのクエリをphp経由で呼び出しており、mysqliを使用していることに注意してください。私は少し実験しましたmysqli_multi_queryが、私もそれで完全に迷っています...

4

1 に答える 1

2

GROUP BY files.ID を追加してみてください。それはそれを行うかもしれませんか?

于 2012-09-20T12:24:41.300 に答える