TB1
-----------------
id | codetb1
-----------------
1 | code1,code2
2 | code2,code3
TB2
-----------------
codetb2 | cost
-----------------
code1 | $20
code2 | $40
code3 | $60
save.php - >这是我将复选框值插入数据库的方式。
$codetb1 = $_POST['codetb1'];
var_dump($codetb1);
// Setting up a blank variable to be used in the coming loop.
$allStyles = "";
// For every checkbox value sent to the form.
foreach ($typeocodetb1fvisit as $style) {
// Append the string with the current array element,
// and then add a comma and a space at the end.
$allStyles .= $style . ", ";
}
// Delete the last two characters from the string.
$allStyles = subs
tr($allStyles, 0, -2);
Result.php - >这是我的联系以及如何获得我的结果
$query="SELECT * FROM tb1, tb2 WHERE
tb1.codetbl1 = tb2.codetbl2 AND
tb1.id='$id'";
大家好 - 非常感谢您的帮助。我有2个数据库(表1和表2)。我想让2个数据库相互链接。我无法完成这个任务。例如,我试过爆炸,但我无法使其发挥作用。
那么如何从codetb1中删除该逗号并找到与codetb2匹配的方法。所以最后我可以得到成本。有什么想法吗?
答案 0 :(得分:2)
首先,答案不涉及更改架构:
MySQL的FIND_IN_SET功能:
SELECT *
FROM tb1, tb2
WHERE FIND_IN_SET(tb2.codetb2, tb1.codetb1);
然而,理想的解决方案是规范化架构(时间允许我将提交另一个答案以及更多细节)
答案 1 :(得分:1)
在我看来,这个问题的唯一“真实”答案是使用规范化架构对域进行建模。具体来说,我们永远不应该有一个列存储多于一个数据的列。我们用来描述你的域的术语是多对多关系,其中tb1中的一行与tb2中的许多行相关,而tb2中的一行可以与许多行相关tb1中的行。目标架构如下所示:
TB1
---------
id | ...
---------
1 | ...
2 | ...
TB2
----------
id | cost
----------
1 | $20
2 | $40
3 | $60
tb1_tb2
-----------------
tb1_id | tb2_id
-----------------
1 | 1
1 | 2
2 | 2
2 | 3
然后,你选择它们的方式取决于你想要的。以下是一些例子:
tbl1中每行的最高和最低“费用”:
SELECT tb1.name, MIN(tb2.cost) as low, MAX(tb2.cost) as high
FROM tb1
JOIN tb1_tb2 ON tb1.id = tb2.tb1_id
JOIN tb2_ON tb1_tb2.tb2_id = tb21.id
GROUP BY tb1.name
tb1中行的总成本:
SELECT tb1.name, SUM(tb2.cost) as total
FROM tb1
JOIN tb1_tb2 ON tb1.id = tb2.tb1_id
JOIN tb2_ON tb1_tb2.tb2_id = tb21.id
GROUP BY tb1.name
这个想法是完全清楚地模仿每个“事物”;并且诀窍是将tb1和tb2之间的每个关系视为一个独特的“事物”(即每个在tb1_tb2中有一行;关系是规范化模式中的全班公民)
一旦您将关系视为一个独特的实体,插入就相当简单。如果你有想要关联的tb1和tb2,只需在tb1_tb2中添加一个带有id的拖曳。
答案 2 :(得分:0)
试试这个:
$query="SELECT * FROM tb1, tb2 WHERE `tb1.codetbl1` LIKE concat('%', concat(`tb2.codetbl2`, '%')) AND tb1.id='$id'";
编辑:如果代码可以获得超过一位数的数字(如code10,code11),这会导致一些问题。你不应该删除最后一个逗号,并使用:
$query="SELECT * FROM tb1, tb2 WHERE `tb1.codetbl1` LIKE concat('%', concat(`tb2.codetbl2`, ',%')) AND tb1.id='$id'";
答案 3 :(得分:0)
table2可以有一个列table_id,然后您的查询将是
$query="SELECT * FROM tb1, tb2 WHERE
tb1.codetbl1 = tb2.tb1_id AND
tb1.id='$id'";
从您的问题我认为它就像你正在尝试构建的购物车,所以你应该有这样的表。
//table customer_cart
-------------------------
| id|item_code|customerid|
-------------------------
|1 |itemcode1|1 |
--------------------------
|2 |itemcode2|1 |
--------------------------
然后是项目表
---------------
| id|price |
---------------
|1 |$30 |
---------------
|2 |$60 |
---------------
答案 4 :(得分:0)
您可以使用FIND_IN_SET()
加入这两个表:
SELECT a.id, b.cost
FROM tb1 a
JOIN tb2 b ON FIND_IN_SET(b.code, a.codetb1) > 0