PHP:选择 2 个表?

标签 php sql mysql database

我有每个用户的事件页面和状态消息页面。

在事件中它包含了用户做过的事情,比如与某人成为 friend 、对图片发表评论等。

users_activities
id | uID | msg | date  

在 users_statusmessages 中,我得到了用户创建的状态消息。

users_statuses
id | uID | message | date

uID 是用户的 ID。

现在我想同时选择它们并将它们合二为一。{}它们按日期 desc 排序的位置(因为两个表中的日期都是 UNIX 时间戳)。

所以类似于 WHERE uID = '$userID' ORDER BY date DESC

我希望它看起来如何的例子:

User: Today is a good day (message) (date: 1284915827) (users_statuses)
User have added as Jack as friend (msg) (date: 1284915811) (users_activities)
User: I have a hard day today (message) (date: 1284915801) (users_statuses)
User have commented on Jacks picture (msg) (date: 1284915776) (users_activities)

我应该如何正确执行此操作?

最佳答案

您需要使用 UNION 运算符:

  SELECT ua.msg, 
         ua.date,
         'activity' AS is_table
    FROM USERS_ACTIVITIES ua
   WHERE ua.uid = '{$userID}'
UNION ALL
  SELECT us.message, 
         us.date, 
         'status'
    FROM USERS_STATUSES us
   WHERE us.uid = '{$userID}'
ORDER BY `date`

联盟

UNION 删除重复项。 UNION ALL 不会删除重复项,而且速度更快。

但是 SELECT 中每个位置的数据类型必须匹配。在提供的查询中,您可以看到在第二个位置引用了日期列。如果第一个查询和第二个查询之间的列顺序颠倒,则会出现错误。

ORDER BY 应用于标准 SQL 中 UNION 查询的结果。在 MySQL 中,这包括 LIMIT 子句。但 MySQL 还支持在 UNION 查询周围放置括号,因此您可以在 UNION 查询之前使用 ORDER BY & LIMIT。

关于PHP:选择 2 个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3746632/

相关文章:

java - 将 Json 从 Java 应用程序传递到 PHP (Laravel)

php - 无法连接服务器以从本地系统访问数据库

php - MySQL - 从表中获取列名并显示它们(使用 PHP)

javascript - 使用 ADO 查询 Oracle 服务器失败 未指定的错误,当选择包含 *

java - 如何将 html 表单中的输入类型 "date"值转换为 java 变量和 SQL 日期格式?

php - Symfony 2 - 顶部菜单未出现在 Sonata admin 中

sql - 如何将 2 个表中的信息放入 1 行?

mysql - 如何将两个表之间的比较记录结果插入到另一个表中?

mysql - 我的停用词列表已加载但无法正常工作

mysql - 无法使用spark-submit连接hive mysql元存储