将 2 列与其他列组合为 1

Posted

技术标签:

【中文标题】将 2 列与其他列组合为 1【英文标题】:Combine 2 columns as 1 with other columns as well 【发布时间】:2016-09-10 11:47:00 【问题描述】:

我有这张桌子

myid             his_id

  7                1

  1                7

  1                6

  1                3

但它给了我 4 条记录而不是 3 条,我尝试使用 mysqli "join" 、 "group by" 但没有用。

我正在尝试使用纯 php 和 jquery 开发一个聊天系统,在上面的 d 表中,用户 7 与用户 1 聊天,用户 1 与用户 7 聊天,所以我希望将其视为相同的聊天,其余部分2(用户1和用户6聊天,用户1和用户3聊天)

我希望它只给我 3 条记录而不是 4 条记录,如有任何帮助,我们将不胜感激,谢谢

对不起,我没有连接到我的系统,我正在使用智能手机,请原谅我下面格式错误的查询

$sql = mysqli_query($connectn, "select a.id, b.his_id, a.myid, a.status, a.date_replied FROM chats a JOIN chats b ON b.myid=b.myid WHERE b.his_id='$regestered_id' or b.myid='$regestered_id' GROUP BY b.his_id ORDER BY a.id DESC") ;

【问题讨论】:

显示查询结果。 我使用so并取消了这么多sql查询,事实上我现在甚至感到困惑 请我只包含我的 sql 查询,请检查它并告诉我为什么它给出 4 条记录而不是 3 条记录,谢谢 您还必须发布如何将值分配给registered_id 变量。 【参考方案1】:

如果您想要 myid 和 his_id 的不同组合,则不能打印 id、date_replied、status 等,而只能打印两列 - his_id、myid。 因为如果有多行,两列具有相同的值,那么决定必须选择哪一行才能打印 id、状态等是另一回事。 因此,只需打印两个用户正在聊天,使用 myid 和 his_id。您可以稍后将它们用于任何其他信息。 现在,你想要的代码是 -

$sql = mysqli_query($connectn, "select distinct 
least(myid, his_id), greatest(myid, his_id) 
from chats");

是的,就像@iblamefish 提到的那样,不要忘记保护您的代码免受 SQL 注入。

【讨论】:

我尝试了上面的 sql,很好,用户 1 看到了 3 条记录,但用户 3 也看到了 3 条记录,而不是只有 1 条(用户 1 聊天)请再次帮忙? 上述 sql 查询查找正在进行的独立聊天的数量(在您的情况下为 3)。要查找一个人正在与多少其他人交谈,您需要一个 where 语句。例如-您想检查用户 3。只需在 sql 查询中的表名后面添加 'where myid=3 or his_id=3'。为了概括它,您可以使用包含一些用户 ID 的变量,而不是 3。 是的,我这样做了,但是当我检查用户 1 时,它显示了 3 条记录,但是当我检查用户 3 时,它仍然显示了 3 条记录而不是 1 条。就像在聊天系统中一样,我也尝试了这么多sql语句,但仍然无法得到我想要的 你能分享你为用户 3 使用的查询吗? 哇,终于成功了,我使用了你给我的查询并添加了“如果我为用户 1 打开聊天,它的 myid='$registered_id' 或 his_id='$regestered_id'按预期只显示 3 条记录,当我为用户 3 打开聊天时,它只按预期显示 1 条记录,非常感谢,我很感激,向你致敬。但请我希望我的查询是正确的,希望它会有不良行为还是将来输出错误?

以上是关于将 2 列与其他列组合为 1的主要内容,如果未能解决你的问题,请参考以下文章

Excel 2010 比较多列(2 列与其他 2 列)

如何根据列组上的多(其他列)条件选择数据框行?

将数据框的一列与另一列匹配,拉入其他列,组合成大数据集

如何根据列组前缀替换列组的空白?

excel 关于一次批量导入时,excel提取列中的中文与其他列组合成数组属性

在列组上应用函数