【问题标题】:How to get the correct userID in my sql query?如何在mysql查询中获取正确的用户ID?
【发布时间】:2020-10-28 15:04:26
【问题描述】:

我的 Node 应用程序中有以下查询:

select
  *
from
  messengerList
where
  messenger_id = ${u_id}
  and not status = "rejected"
  or messenged_id = ${u_id}
  and not status = "rejected"

在函数中如下所示

let chatIdList = await sqlSrv.getSqlResults(`select * from messengerList where messenger_id=${u_id} and not status="rejected" or messenged_id=${u_id} and not status="rejected"`)
    .catch(error => {throw error});

我不想全选,我只想选择idmessenger_idmessenged_id,其中id 不等于u_id
所以,chatIdList 应该是这样的:

[{id: 1, messenger_id: 3}, {id: 2, messenged_id: 5}] // messenger_id != messenged_id != u_id

我可以通过更改查询来实现吗?如果是,您能否提供这样的查询或示例?

【问题讨论】:

  • 您不能在单个查询的不同行中返回不同的列名。
  • 你还需要修复SQL注入向量(让我给你介绍my friend Bobby)。使用参数化查询,而不是(有效地)字符串连接。
  • 欢迎来到 Stack Overflow!请使用tour(你会得到一个徽章!)并通读help center,尤其是How do I ask a good question?你最好的选择是做你的研究,search关于SO的相关主题,然后试一试. 如果您在进行更多研究和搜索后遇到困难并且无法摆脱困境,请发布您的尝试minimal reproducible example,并具体说明您卡在哪里。人们会很乐意提供帮助。
  • 嘿,谢谢你,我会的!

标签: javascript mysql sql node.js


【解决方案1】:

如果我理解正确的话。 首先,列出所有数据 然后,您使用 if 查询

简单代码

SELECT * FROM messengerList

那么,

  if(res.rows[i].messenger_id==u_id){
          //....
     }else{
          //----
     }

【讨论】:

  • 我认为可以通过更改查询来完成,但我只是在得到结果后修改数组:for(let chat of chatIdList){ chat.messenger_id == u_id ? delete chat.messenger_id : delete chat.messenged_id; }
【解决方案2】:

基本上你做了什么,除了添加另一个条件来消除你不想显示的那些:

select
  *
from
  messengerList
where
not status = "rejected"
and messenger_id <> messenged_id
  and (
       messenger_id = ${u_id}
       or messenged_id = ${u_id}
  )

【讨论】:

  • 代码转储不是有用的答案。说出你做了什么,以及为什么/如何工作。
  • @Lobster hmm.. 那么你在寻找什么结果,在你的问题中,粘贴你的数据和你想要的输出
  • 它仍然选择两个 id 而不仅仅是不等于u_id 的那个。我现在只是进入一个 for 循环并删除保持 id 等于 u_id 的键
猜你喜欢
  • 2019-11-05
  • 2020-09-22
  • 1970-01-01
  • 2021-04-28
  • 2023-02-24
  • 2021-01-15
  • 1970-01-01
  • 2017-04-05
  • 1970-01-01
相关资源
最近更新 更多