有没有一种方法可以识别使用 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
建议更快。
我有一个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
建议更快。