很抱歉我的标题不清楚。我正在制作一个网站与PHP在那里用户可以提交帖子。我目前使用MySQL数据库来存储用户和帖子。我还想存储每个用户和每个帖子之间的相关性值。这就是思路:
-----------------
| user1 | user2 |
-------------------------
| post1 | #val | #val |
-------------------------
| post2 | #val | #val |
-------------------------
我希望我可以在MySQL中这样做一个表,但我不能选择列名与准备语句,除非我连接到一个查询,这显然是不理想的。
我以前问过一个类似的问题,答案是制作一个三列表,其中每行表示一个相关性。像这样:
=======================
| user | post | value |
=======================
| usr1 | pst1 | #val |
-----------------------
| usr2 | pst1 | #val |
-----------------------
| usr1 | pst2 | #val |
-----------------------
| usr2 | pst2 | #val |
-----------------------
我不喜欢这个。它存储了很多无关的数据,因为它存储了每个用户的id多次,每个帖子的id多次。它还需要大量的行;如果我只有100个帖子和100个用户,那将是10,000行。
我不怕在我的项目中添加另一个数据库(或者如果我喜欢的话,完全切换到另一种数据库类型)来适应这一点。我知道市面上有很多NoSQL数据库,但我对MySQL之外的数据库没有任何经验,我不知道什么数据库适合我的需要。我担心在MySQL中这样做是合理的吗?或者MySQL能处理这么多行吗?在MySQL中还有其他更有效的方法吗?如果没有,我想知道最好的数据库类型是什么。
这似乎是一个非常常见的类型的东西存储,但我没有看到一个合理的方式在MySQL中做到这一点;因此,我认为有一种数据库类型非常适合这样做。
关系存储的基础是相同的,与您使用的数据库无关。当然,您应该以避免冗余的数据库设计为目标。这就是关系数据库的全部意义……
但现在到实际问题!: -)
我想你只是在寻找一个与你之前收到的答案不同的答案。
=======================
| user | post | value |
=======================
| usr1 | pst1 | #val |
-----------------------
| usr2 | pst1 | #val |
-----------------------
| usr1 | pst2 | #val |
-----------------------
| usr2 | pst2 | #val |
-----------------------
我将创建三个表。一个主表和两个链接表
主:主数据表:
=============================
| user_id | post_id | value |
=============================
| 1 | 1 | #val |
-----------------------------
| 2 | 1 | #val |
-----------------------------
| 1 | 2 | #val |
-----------------------------
| 2 | 3 | #val |
-----------------------------
链接表1:user
===============
| id | name |
===============
| 1 | Mark |
---------------
| 2 | Sohpie |
---------------
link-table 2: post
===========================
| id | post |
===========================
| 1 | How are you? |
---------------------------
| 2 | The nuts are brown |
---------------------------
| 3 | Milk is white |
---------------------------
那么你可以像这样做join来获取数据:
SELECT u.name, p.post, m.val FROM main m
LEFT JOIN ON user u ON (m.user_id = u.user_id)
LEFT JOIN ON post p ON (m.post_id = p.post_id)
结果应该类似于
Mark, How are you, #val
Sophie, How are you, #val
Mark, The nuts are brown, #val
Sophie, Milk is white, #val
我不确定你说的#val是什么意思(它是如何计算的?),但我希望这个答案能给你一个线索,你如何解决剩下的问题。