Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:选择2个表?_Php_Sql_Mysql_Database - Fatal编程技术网

PHP:选择2个表?

PHP:选择2个表?,php,sql,mysql,database,Php,Sql,Mysql,Database,我为每个用户提供了一个活动页面和一个状态消息页面 在活动中,它包含用户所做的事情,例如与某人成为朋友、对图片发表评论等等 users_activities id | uID | msg | date 在users\u statusmessages中,我得到了用户创建的statusmessages users_statuses id | uID | message | date uID是用户的id 现在我想选择这两个选项,同时{}将它们放在一个选项中。其中,它们按date desc排序(因

我为每个用户提供了一个活动页面和一个状态消息页面

在活动中,它包含用户所做的事情,例如与某人成为朋友、对图片发表评论等等

users_activities
id | uID | msg | date  
在users\u statusmessages中,我得到了用户创建的statusmessages

users_statuses
id | uID | message | date
uID是用户的id

现在我想选择这两个选项,同时{}将它们放在一个选项中。其中,它们按date desc排序(因为两个表中的日期都是UNIX时间戳)

所以类似于
其中uID='$userID'按日期排序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)

我该怎么做才对呢?

你会想使用工会

这是未经测试的

(SELECT uID, msg as message, date from users_activities)
UNION
(SELECT uId, message, date from users_statuses) order by date desc limit 20

该页面上还有很多示例

您需要使用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中联合查询的结果。在MySQL中,这包括
LIMIT
子句。但是MySQL也支持在联合查询的周围放上括号,这样您就可以在联合查询之前使用ORDER BY&LIMIT了。

类似的方法就可以了

SELECT act.*,status.* FROM users_activities act, users_statuses status WHERE act.id = status.id AND status.id = '$UID' ORDER BY status.date,act.date DESC LIMIT 30
为了视觉目的而隔开:

SELECT
    act.*,status.*
FROM
    users_activities act,
    users_statuses status
WHERE
    act.id = status.id
AND
    status.id = '$UID'
ORDER BY 
    status.date,act.date DESC
LIMIT
    30

你可能误解了这个问题。据我所知,活动和状态之间没有关系。当我在一段时间内使用它时($show=mysql\u fetch\u array($query))我接收:mysql\u fetch\u array()期望参数1是资源,布尔值在中给出。这是因为ORDER BY ua.date,我如何解决这个问题?在等待订单部分的回答时,我尝试了echo$show[“msg”],它工作正常,可以获取所有用户的状态,但当我执行$show[“message”]时,显示任何内容。只是注意到,当我执行$show[“msg”]时,它会像我一样显示msg和消息wanted@Karem:是的,列引用基于联合的第一个查询。对不起,除了这个,我什么都提到了。好吧,我想最后一件事,我正在试图找出
uID
='$USER',但是我没有得到任何结果。这是怎么回事?