有没有一种方法可以识别使用 sql 语句选择了哪些数据

Is there a way to identify which data has been selected with the sql statement

我有一个sql声明:

$feed=$conn->prepare("SELECT * FROM posts WHERE post_by=? OR id=? ORDER BY id DESC LIMIT 10");
$feed->bind_param("ii",$friend['id'],$like[id]);
$feed->execute();

$friend['id']是用户好友的id,$like[id]是用户好友点赞的id。

使用此查询获取的 post 出现在页面中。

我想要的是我想知道哪些posts已经被用户的朋友posted了(哪些posts已经被fetched使用 $friends['id']) 并且所有 post 已被用户的朋友喜欢并出现在提要中(所有 post 已使用 $like['id'] 获取)

我想知道我可以尝试实现我想要的所有可能性。

我尝试用 UNION ALL 改变我的查询,但它显示错误,我无法实现我想要的。

目前没有错误,但我希望用户知道这个 post 是如何出现在新闻源中的。

希望大家对我的问题有一个很好的了解,并且所有类型的 hack 也被接受,因为我希望以某种方式实现结果我也同意改变 mt 查询性质。

请发表评论以获取更多信息。

提前致谢。

您可以做的是将查询的 'OR' 子句分解为两个单独查询的 UNION,并添加一个标记列以指示该行是由 friend 还是由 friend 找到的like:

SELECT * 
FROM 
(
   SELECT *, 'Friend' AS HowFound
   FROM posts 
   WHERE post_by= ?postId

UNION 

   SELECT *, 'Like' AS HowFound
   FROM posts 
   WHERE id= ?friendId AND post_by <> ?postId
) x
ORDER BY id DESC 
LIMIT 10;

您需要从其中一个选择中排除同时匹配 friend 和 post classifications 的行,否则它会被报告两次(或者,否则您的应用程序将需要将它们结合起来)。

我不是 PHP 大师,但我确信有一种方法可以命名参数以允许上述排除。

需要派生table对整体结果进行排序和限制。

SELECT *, post_by = ?postId AS post_by_friend
FROM posts
WHERE post_by = ?postId OR
      id = ?friendId
ORDER BY id DESC
LIMIT 10
如果满足第一个条件,

post_by_friend 将为 1,否则为 0。我没有对其进行基准测试,但这种方法应该比 StuartLC 的 UNION 建议更快。