有没有办法识别使用sql语句选择了哪些数据

时间:2015-05-28 04:54:35

标签: php mysql prepared-statement news-feed

我有一个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。

使用此查询提取的帖子会显示在页面中。

我想要的是我想知道用户朋友发布了哪些帖子(所有帖子都是使用$friends['id'])提取的,所有帖子都是由用户的朋友并显示在Feed中(所有帖子都是使用$like['id']提取的)

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

我尝试用UNION ALL改变我的查询,但它显示错误,我无法达到我想要的效果。

目前没有错误,但我希望用户知道此帖子在新闻源中的显示方式。

希望你们对我的问题都有一个好主意,所有类型的黑客也被接受,因为我想在某种程度上实现结果,我也同意改变查询性质。

请评论以获取更多信息。

提前致谢。

2 个答案:

答案 0 :(得分:1)

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建议更快。

答案 1 :(得分:0)

您可以做的是打破查询“OR”的问题。将子句放入两个单独查询的UNION中,并添加一个标记列以指示该行是由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;

您希望从其中一个选项中排除与friendclassifications匹配的行,否则会报告两次(或者,否则您的应用需要将它们合并)。

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

需要派生表来订购和限制整体结果。