MySQL从数组中获取行

时间:2014-12-21 09:29:30

标签: php mysql performance left-join

我的项目中有一个用户表

id   |    name    |    user_group
-----+------------+----------------
1    |   name     |     1
2    |   name     |     1
3    |   name     |     2
4    |   name     |     2
5    |   name     |     2
6    |   name     |     2
7    |   name     |     2
------------------------------------

每个用户都与一个群组

相关联

此外,用户还可以将图像上传到网站,这样我就可以获得图像表。

id    |     image_name      | user_id       |   uploaded_date
------+---------------------+---------------+--------------------------
1     |    dder.jpg         |    1          |    2014-12-12 00:00:00
2     |    dder.jpg         |    1          |    2014-12-12 00:00:00
3     |    dder.jpg         |    2          |    2014-12-12 00:00:00
4     |    dder.jpg         |    3          |    2014-12-12 00:00:00
5     |    dder.jpg         |    6          |    2014-12-12 00:00:00
6     |    dder.jpg         |    7          |    2014-12-12 00:00:00
7     |    dder.jpg         |    7          |    2014-12-12 00:00:00
8     |    dder.jpg         |    5          |    2014-12-12 00:00:00
9     |    dder.jpg         |    2          |    2014-12-12 00:00:00
10    |    dder.jpg         |    1          |    2014-12-12 00:00:00
------------------------------------------------------------------------

现在我的问题是我需要在 uploaded_date

的DESC中获取 user_group = 2 上传的图片列表

有人可以帮我解决一个简单的问题吗?

提前致谢

2 个答案:

答案 0 :(得分:0)

一种可能的方法:

    SELECT i.* 
      FROM images i
INNER JOIN users u 
           ON i.user_id = u.id
     WHERE u.user_group = 2
  ORDER BY i.uploaded_date DESC

Demo。为了提高性能,在user_id表中的images列上设置外键是很重要的,该列引用id表中的users列。

答案 1 :(得分:0)

您可以这样解决:http://sqlfiddle.com/#!2/28a18/1

SELECT     img.image_name
FROM       images img
INNER JOIN users usr
ON         img.user_id = usr.id
WHERE      usr.user_group = 2
ORDER BY   img.uploaded_date DESC

但是,如果您希望在某个时刻为用户分配多个user_group,则应该具有以下内容:http://sqlfiddle.com/#!2/8f938/1