Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/259.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 有没有办法在sql查询中返回多个不相关的结果?_Php_Mysql_Sql - Fatal编程技术网

Php 有没有办法在sql查询中返回多个不相关的结果?

Php 有没有办法在sql查询中返回多个不相关的结果?,php,mysql,sql,Php,Mysql,Sql,我试图在我的网站上创建一个“feed”系统,在那里发布用户帖子上的活动。为了有效地执行此操作并按日期排序所有活动,我需要将所有内容都放在一个巨大的查询中(除非有其他有效方法)。我的问题是,我当前的“feed”页面有多个ajax调用来获取所有不同的数据,例如用户帖子上的评论或用户开始辩论时的投票。有没有一种方法可以组合不相关的查询以返回多个结果?例如,我可以将这两个查询合并为一个查询吗? 问题1: 问题2: SELECT polls.poll_id, polls.title, polls.idUs

我试图在我的网站上创建一个“feed”系统,在那里发布用户帖子上的活动。为了有效地执行此操作并按日期排序所有活动,我需要将所有内容都放在一个巨大的查询中(除非有其他有效方法)。我的问题是,我当前的“feed”页面有多个ajax调用来获取所有不同的数据,例如用户帖子上的评论或用户开始辩论时的投票。有没有一种方法可以组合不相关的查询以返回多个结果?例如,我可以将这两个查询合并为一个查询吗? 问题1:

问题2:

SELECT polls.poll_id, polls.title, polls.idUsers, polls.date, users.uidUsers, profileimages.image
FROM polls JOIN
     users JOIN
     profileimages
     ON polls.idUsers = users.idUsers AND profileimages.idUsers = users.idUsers
WHERE polls.idUsers = '$following'
ORDER BY polls.date ASC";
是的,你能做到

但是像我使用的那样的内部连接会产生很多不想要的结果

所以您应该使用phpmyadmin或workbench

运行一个这样的查询,看看它是否给出了正确的结果。 如果没有,您必须将其分组或添加更多where条件

SELECT
  t1.article_id
  ,t1.title
  ,t1.idUsers
  ,  t2.poll_id
  , t2.title
  , t2.idUsers
  , t2.date
  , t1.uidUsers 
  , t2.image
FROM
  (SELECT 
    articles.article_id
    , articles.title
    , articles.date
    , articles.idUsers
    , users.uidUsers 
    , profileimages.image 
  FROM 
    articles 
    JOIN users 
    JOIN profileimages 
   ON articles.idUsers = users.idUsers AND profileimages.idUsers = users.idUsers 
  WHERE articles.idUsers = '$following' AND articles.published = 'yes' 
  ORDER BY articles.date ASC) t1
inner join
 (SELECT 
  polls.poll_id
  , polls.title
  , polls.idUsers
  , polls.date
  , users.uidUsers
  , profileimages.image 
FROM 
  polls 
  JOIN users 
  JOIN profileimages 
  ON polls.idUsers = users.idUsers AND profileimages.idUsers = users.idUsers 
WHERE polls.idUsers = '$following' 
  ORDER BY polls.date ASC) t2
on t1.uidUsers = t2.uidUsers
ORDER BY t2.date;

我将创建一个union all,并在每个查询结果上添加一个新列“type”

SELECT 
    articles.article_id as id, 
    articles.title as title, 
    articles.date as date, 
    articles.idUsers as idUsers, 
    users.uidUsers as uidUsers,
    profileimages.image as image,
    'article' as type
FROM articles 
JOIN users  ON articles.idUsers = users.idUsers 
JOIN profileimages on  profileimages.idUsers = users.idUsers 
WHERE articles.idUsers = '$following' AND articles.published = 'yes'

union all   


SELECT  
        polls.poll_id as id, 
        polls.title as title,
        polls.date as date,
        polls.idUsers as idUsers,        
        users.uidUsers as uidUsers,
        profileimages.image as image,
        'pool' as type
FROM polls 
JOIN users ON polls.idUsers = users.idUsers
JOIN profileimages  ON profileimages.idUsers = users.idUsers 
WHERE polls.idUsers = '$following'  
然后,您可以创建一个超级选择,以便根据需要对结果进行排序

select * from (

    SELECT 
        articles.article_id as id, 
        articles.title as title, 
        articles.date as date, 
        articles.idUsers as idUsers, 
        users.uidUsers as uidUsers,
        profileimages.image as image,
       'article' as type
    FROM articles 
       JOIN users  ON articles.idUsers = users.idUsers 
       JOIN profileimages on  profileimages.idUsers = users.idUsers 
    WHERE articles.idUsers = '$following' AND articles.published = 'yes'

    union all     


    SELECT  
        polls.poll_id as id, 
        polls.title as title,
        polls.date as date,
        polls.idUsers as idUsers,        
        users.uidUsers as uidUsers,
        profileimages.image as image,
        'pool' as type
    FROM polls 
        JOIN users ON polls.idUsers = users.idUsers
        JOIN profileimages  ON profileimages.idUsers = users.idUsers 
    WHERE polls.idUsers = '$following' 

) query order by query.type, query.date 
性能通常与全表扫描有关。确保正确创建了所有索引,并记住在where子句中使用它。
在结果太多的情况下,考虑实现查询分页。

可以在<代码>结合< < /代码> ING之前<代码>联合所有< /代码>,因为连接非常相似:

SELECT ap.article_id, ap.title, ap.date, ap.idUsers,
       u.uidUsers, pi.image
FROM ((SELECT a.article_id, a.title, a.date, a.idUsers
       FROM articles a
       WHERE a.idUsers = '$following' AND a.published = 'yes'
      ) UNION ALL
      (SELECT p. poll_id, p.title, p.date, p.idUsers
       FROM posts p
       WHERE p.idUsers = '$following'
      )
     ) ap JOIN
     users u
     ON ap.idUsers = u.idUsers JOIN
     profileimages pi
     ON pi.idUsers = u.idUsers
ORDER BY ap.date ASC;
注意
$following
应作为参数而不是字符串传入。

请参阅
SELECT ap.article_id, ap.title, ap.date, ap.idUsers,
       u.uidUsers, pi.image
FROM ((SELECT a.article_id, a.title, a.date, a.idUsers
       FROM articles a
       WHERE a.idUsers = '$following' AND a.published = 'yes'
      ) UNION ALL
      (SELECT p. poll_id, p.title, p.date, p.idUsers
       FROM posts p
       WHERE p.idUsers = '$following'
      )
     ) ap JOIN
     users u
     ON ap.idUsers = u.idUsers JOIN
     profileimages pi
     ON pi.idUsers = u.idUsers
ORDER BY ap.date ASC;