首页 > 解决方案 > MySQL - 为什么我的查询只返回一行而不是三行?

问题描述

我在messagesMySQL 数据库的表中有 3 个条目,其中接收者的 id 是整数 291。我的查询应该选择这三个条目,然后从帐户表中加入接收者的名称和头像;

SELECT
m.audiourl, 
m.receiver, 
m.audioid, 
m.sender,   
ac.gavatar, 
ac.name 
FROM messages m 
LEFT JOIN accounts ac ON ac.id = m.sender
WHERE m.receiver = 291 

这是消息表;

消息表

但不是返回三行 JSON 数据,而是仅返回第一行。IE;

{"audiourl":"87-message-291-4.m4a","receiver":291,"audioid":4,"sender":87,"gavatar":"87-user.jpg","name":"GroovyGrrl"}

它应该是这样的;

[{
"audiourl":"87-message-291-4.m4a","receiver":291,"audioid":4,"sender":87,"gavatar":"87-user.jpg","name":"GroovyGrrl",
"audiourl":"87-message-291-5.m4a","receiver":291,"audioid":4,"sender":87,"gavatar":"87-user.jpg","name":"GroovyGrrl",
"audiourl":"87-message-291-6.m4a","receiver":291,"audioid":4,"sender":87,"gavatar":"87-user.jpg","name":"GroovyGrrl"
}]

我的查询有什么问题?

标签: mysql

解决方案


感谢我在评论中收到的故障排除建议,我了解到问题出在 NodeJS 而不是 MySQL 查询上。

我用它来收集查询结果;

const audiourl = row_a[0].audiourl;
const receiver = row_a[0].receiver;
const audioid = row_a[0].audioid;
const sender = row_a[0].sender;
const gavatar = row_a[0].gavatar;
const name = row_a[0].name;
const timestamp = row_a[0].timestamp;

用这个返回JSON;

  res.json({
   "audiourl": audiourl,
   "receiver": receiver,
   "audioid": audioid,
   "sender": sender,
   "gavatar": gavatar,
   "name": name,
   "timestamp": timestamp     
    });

但相反,我应该跳过所有变量并简单地这样做;

  res.json(row_a)

中的“0”row_a[0]仅返回第一行。


推荐阅读