结合多个MySQL查询

时间:2012-09-20 12:22:18

标签: php mysql mysqli

所以,我在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 method,这意味着我有一个名为“tagmap”的表格,其中包含行file_idtag_id,我的表格为“tag”,其中包含行tag_idtag_name

要在只有一个文件的页面上列出我需要的标签,我使用此查询:

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

如何将两者结合起来,以便我可以在列表中显示第一个查询提供的标签?

这是我尝试的但它只给了我一个结果:

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进行了一些实验,但我也完全迷失了......

1 个答案:

答案 0 :(得分:2)

尝试添加GROUP BY files.ID。那可能会这样做?