Mysql 从SQL查询中获取重复项?
我正在使用这个sql查询,但是我得到了重复的查询。如何确保每个inst_id只能获取一个帖子?我猜是我的组由main_posts.c_p_id实现的,但是如果我没有它,我会得到一个错误,因为我是按它排序的。基本上,我会先在main_posts.c_p_id中对匹配的帖子进行排序和放置Mysql 从SQL查询中获取重复项?,mysql,sql,Mysql,Sql,我正在使用这个sql查询,但是我得到了重复的查询。如何确保每个inst_id只能获取一个帖子?我猜是我的组由main_posts.c_p_id实现的,但是如果我没有它,我会得到一个错误,因为我是按它排序的。基本上,我会先在main_posts.c_p_id中对匹配的帖子进行排序和放置 SELECT main_posts.c_p_id, insts.inst_id, insts.inst_title FROM insts LEFT JOIN inst_posts ON inst_p
SELECT main_posts.c_p_id, insts.inst_id, insts.inst_title
FROM insts
LEFT JOIN inst_posts
ON inst_posts.instp_inst_id = insts.inst_id
LEFT JOIN main_posts
ON main_posts.c_id = insts.instp_c_id
GROUP BY insts.inst_id, main_posts.c_p_id
ORDER BY main_posts.c_p_id DESC, insts.inst_title ASC
如何确保每个inst_id只能获取一个帖子
因为,您没有提供任何示例数据,但是您提到您将获得重复的行。然后,您可以使用DISTINCT
来显示不同的行
SELECT DISTINCT main_posts.c_p_id, insts.inst_id, insts.inst_title
FROM insts
LEFT JOIN inst_posts
ON inst_posts.instp_inst_id = insts.inst_id
LEFT JOIN main_posts
ON main_posts.c_id = insts.instp_c_id
GROUP BY insts.inst_id, main_posts.c_p_id
ORDER BY main_posts.c_p_id DESC, insts.inst_title ASC
我猜是我的团队通过main_posts.c_p_id实现的
可能吧
但是如果我没有它,我会得到一个错误,因为我是按它排序的
不,您得到的是错误,因为您在
分组依据
中提到了main\u posts.c\u p\u id
列。ORDER BY
只会对记录进行排序,无论您是否选择此列。警告:这有一些严重的问题,因为查询中使用了用户数据。尽可能使用事先准备好的陈述。在任何用户提供的数据都指定有?
或:name
指示符的情况下,这些操作非常简单,稍后将根据您使用的是哪个指示符,使用绑定参数或执行
填充指示符。千万不要直接在你的查询中放入$\u POST
、$\u GET
或任何用户数据。我明白了,但是,谁说过关于POST或GET的任何内容?任何形式的用户数据都是危险的。$p_id
来自哪里?什么是$taged
?如果不明显它逃逸了,那么我们唯一能推测的就是它没有逃逸。占位符值使所有操作都正确,错误无法隐藏。@tadman更新了占位符值。您需要至少向我们显示示例数据和预期输出!我以前试过,但这过滤掉了一些来自main_posts的匹配项,这就是为什么我把main_posts.c_p_id DESC
,但这需要一组main_posts.c_p_id
,这又给了我重复项。很抱歉,我不太擅长这一点。@SeaBass,那么,你需要至少显示你的数据和预期的输出。如果我按main_post保留顺序,但按group将其从组中删除,我需要运行此命令以使其工作mysqli_查询($db_link,“SET SESSION sql_mode='TRADITIONAL')
,但它也会过滤掉main_post中的匹配项。这就像它找到了两个匹配项,但选择显示一个不是来自主论坛的帖子。我看看我能不能想出办法给你数据。我对不同的表格以及如何呈现感到困惑。