对于交易列表,我需要提供以下列:
- log_out.timestamp
- 项目.描述
- log_out.qty
- 类别.名称
- 存储名称
- log_out.dnr(代表用户id)
log_out
中的表结构如下所示:
| id | timestamp | storageid | itemid | qty | categoryid | dnr |
| | | | | | | |
| 1 | ........ | 2 | 23 | 3 | 999 | 123 |
正如人们所猜测的,我只将其他表中的相应 ID 存储在该表中。注意:log_out.id
是该表中的主键。
为了获取相应的字符串、整数或其他内容,我尝试了两个查询。
方法 1
SELECT i.description, c.name, s.name as sname, l.*
FROM items i, categories c, storages s, log_out l
WHERE l.itemid = i.id AND l.storageid = s.id AND l.categoryid = c.id
ORDER BY l.id DESC
方法2
SELECT log_out.id, items.description, storages.name, categories.name AS cat, timestamp, dnr, qty
FROM log_out
INNER JOIN items ON log_out.itemid = items.id
INNER JOIN storages ON log_out.storageid = storages.id
INNER JOIN categories ON log_out.categoryid = categories.id
ORDER BY log_out.id DESC
它们在我的开发机器上都运行良好,该机器在 log_out
中存储了大约 99 个虚拟交易。主服务器上的数据库在表中存储了大约 1100 笔以上的交易。这就是麻烦开始的地方。无论我在主机上运行这两种方法中的哪一种,它总是返回 0 行,没有任何错误*叹息*。
首先我想,这是因为主机使用MariaDB而不是MySQL。但是当我将远程的 log_out
表导入到我的开发机器后,它的行为与主机相同 -> 返回 0 行,没有错误。
你们知道发生了什么吗?
最佳答案
如果表中有数据,那么它可能与相应表中的JOIN
和相关记录有关。我将从 log_out
表开始,并逐步添加 JOIN
中的其他表,例如:
SELECT *
FROM log_out;
SELECT *
FROM log_out
INNER JOIN items ON log_out.itemid = items.id;
SELECT *
FROM log_out
INNER JOIN items ON log_out.itemid = items.id
INNER JOIN storages ON log_out.storageid = storages.id;
SELECT *
FROM log_out
INNER JOIN items ON log_out.itemid = items.id
INNER JOIN storages ON log_out.storageid = storages.id
INNER JOIN categories ON log_out.categoryid = categories.id;
我会一一执行所有查询,看看哪一个查询结果为 0 条记录。该查询中的附加联接将是存在数据差异的联接。
关于mysql - 使用三个带有 1000 多个条目的表进行 SELECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46135667/