通过另一个表中的时间戳对MySQL查询进行排序

时间:2011-04-18 00:29:55

标签: mysql sorting foreign-keys

我想构建一个查询来返回已登录用户的项目ID列表,将最新的排序到最近的最近?

我有2个MySQL表:

  • 表'project_access'包含'project_id'和'member_id',它将用户附加到每个项目ID。
  • 表'项目'包含匹配的'project_id'以及项目的所有详细信息,包括'updated',这是一个日期戳。

这是我到目前为止所得到的:

SELECT project_id FROM project_access WHERE member_id='" . $_SESSION["myid"] . "'  ORDER BY updated DESC"

'updated'实际上在另一个表中。如何将其写入查询?

由于

2 个答案:

答案 0 :(得分:1)

您使用JOIN子句,如下所示:

SELECT projects.project_id, projects.updated
FROM project_access 
INNER JOIN projects
ON project_access.project_id=projects.project_id 
WHERE project_access.member_id='" . $_SESSION["myid"] . "'  
ORDER BY projects.updated DESC

注意:您应该阅读有关JOIN子句的信息:

http://dev.mysql.com/doc/refman/5.0/en/join.html

..上述查询可能适用与否,具体取决于您的要求和表格结构。

在处理SQL语句时,还应确保正确转义字符串,以避免SQL注入攻击:

http://php.net/manual/en/function.mysql-real-escape-string.php

http://en.wikipedia.org/wiki/SQL_injection

您的代码应为:

WHERE project_access.member_id='" . mysql_real_escape_string($_SESSION["myid"]) . "'

(我假设您在这里使用PHP)。

SQL JOIN教程:

http://www.halfgaar.net/sql-joins-are-easy

http://www.tizag.com/mysqlTutorial/mysqljoins.php

答案 1 :(得分:1)

这将做你的事后。

"SELECT 
    projects.project_id
FROM project_access 
INNER JOIN projects ON (project_access.project_id = projects.project_id)
WHERE project_access.member_id='" . $_SESSION["myid"] . "'  
ORDER BY projects.updated DESC"

我建议你阅读一些基本的查询教程,特别是关于连接。这个应该有用http://www.sql-tutorial.net/SQL-JOIN.asp