php – MySQL:将表B中的多个记录链接到一行中的表A的单个记录中
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – MySQL:将表B中的多个记录链接到一行中的表A的单个记录中,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1562字,纯文字阅读大概需要3分钟。
内容图文
![php – MySQL:将表B中的多个记录链接到一行中的表A的单个记录中](/upload/InfoBanner/zyjiaocheng/892/09aca37612ce4827a1afb39f4406154f.jpg)
我正在设计PHP / MySQL的票务系统.
每个故障单代表“故障单”表中的一行.
用户可以为每个故障单添加多个“评论”.
查看故障单时,我只是在“评论”表上执行SQL查询,以选择链接到相应的ticketid的所有评论
但是,现在我必须设计一个搜索页面,它返回任何匹配的票证并立即显示(部分,例如最后5个)他们的链接评论.
我通过执行我在单个故障单视图页面中使用的相同SQL查询来完成此工作,但对搜索查询中的每个匹配行重复此操作.因此,如果您有1500个匹配的行,这意味着’comments’表上有1500个SQL查询,是的,效率不高……
现在我想知道:有没有办法将评论表加入到故障单表中,但是将评论表中的多行“挤压”成一列?
我正在考虑在注释行上执行CONCAT(),将它们作为逗号分隔值返回,然后我可以在php中再次爆炸()以获取包含我对每个票证的所有注释的数组.但这是最有效的方式还是有更好的方法?
编辑:请记住,我们还应该通过查询返回没有任何评论的票
解决方法:
Zane Bien回答了CONCAT的问题,我不会评论它,因为没有太多要补充,但你也问过它是否是最有效的方式,所以我会选择这个.
我真的不喜欢CONCAT解决方案.这不是SQL的哲学,你永远不知道用户将在评论区写什么.
就SQL而言,正确的做法是:
SELECT
tickets.*,
comments.*
FROM tickets
LEFT JOIN comments ON comments.ticket_id = tickets.id
WHERE tickets.title LIKE '%whatever%';
然后在PHP中,您只需迭代结果集并构建输出.请注意,LEFT JOIN将正确地返回没有评论的票证.
如果你感到有些不安 – 但不应该! – 拥有每行的故障单信息,您可以在2中分割查询:
SELECT
tickets.*
FROM tickets
WHERE tickets.title LIKE '%whatever%';
和
SELECT
comments.*
FROM comments
INNER JOIN tickets ON comments.ticket_id = tickets.id
WHERE tickets.title LIKE '%whatever%';
这意味着在应用程序方面需要更多工作,因为您必须将注释链接回票证.
我的建议是:进行一体化查询.
内容总结
以上是互联网集市为您收集整理的php – MySQL:将表B中的多个记录链接到一行中的表A的单个记录中全部内容,希望文章能够帮你解决php – MySQL:将表B中的多个记录链接到一行中的表A的单个记录中所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。