Php 带分号分隔字符串的Mysql搜索
我有两张像这样的桌子Php 带分号分隔字符串的Mysql搜索,php,mysql,Php,Mysql,我有两张像这样的桌子 table A table B id | data id | features --------- -------------- 1 | blue 1A | 1;2 2 | red 2B | 1;2;3 3 | yellow 3B | 3;1 ...... ...... 我计划做的事情是这样的,我查询一个表。循环遍历结果数组
table A table B
id | data id | features
--------- --------------
1 | blue 1A | 1;2
2 | red 2B | 1;2;3
3 | yellow 3B | 3;1
...... ......
我计划做的事情是这样的,我查询一个表。循环遍历结果数组,并用分号分隔符分解数据。然后循环遍历新数组并查询它以获取数据(注意下面的代码未测试)
$sql=“从'tableB'中选择*,其中'id`='2B'限制1”;
$query=$db->query($sql);
while($row=mysql\u fetch\u array($query)){
$arr=分解(“;”,$row['features']);
对于($i=0;$iquery($sql2);
while($row2=mysql\u fetch\u数组($query2)){
$r[]=$row2['data'];
}
}
}
印刷费($r);
在mysql中,我将tableB中的列与tableA中的ID进行匹配,是否有一种方法可以实现这一点?或者不使用嵌套循环?性能是关键。因为两个表都有超过25k行的数据
提前感谢您需要的是 这将获取一个id数组,并在单个查询中给出每个结果 因此,应用代码后,代码应该是这样的
while ($row = mysql_fetch_array($query)) {
$new_query = str_replace(";", ",", $row['features']);
$sql2 = "SELECT * FROM `tableA` WHERE `id` IN ($new_query)";
$query2 = $db->query($sql2);
while ($row2 = mysql_fetch_array($query2)) {
$r[] = $row2['data'];
}
}
查看此代码。减少了几个循环
$sql = "SELECT * FROM `tableB` WHERE `id`= '2B' LIMIT 1";
$query = $db->query($sql);
$arr = explode(';', $row['features']);
$str = implode(",", $arr);
$sql2 = "SELECT * FROM `tableA WHERE id IN ({$str});";
$query2 = $db->query($sql2);
while ($row2 = mysql_fetch_array($query2)) {
$r[] = $row2['data'];
}
我认为一个更好的方法是重组你的桌子。使其正常化。谢谢。获取错误
您的SQL语法有错误;查看与MySQL服务器版本对应的手册,了解在“A76,A70,A07,A08,A15})附近使用的正确语法。
查询如下所示:SELECT*FROM
tableA`WHEREid
IN({A76,A70,A07,A08,A15})`我编辑了代码。我使用的是query变量,而不是new_query。它现在应该可以工作了。嗯,你的$sql2仍然是原来的tho。我生成的查询是SELECT*FROM
tableA`WHEREid
IN(A76、A70、A07、A08、A15)`获取错误您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解在“A76,A70,A07,A08,A15}”附近使用的正确语法。
查询如下所示:SELECT*FROM
tableA`WHEREid
IN({A76,A70,A07,A08,A15})`然后删除{}
WHERE子句中的未知列“A76”
必须添加“在我所有的ID周围都有代码$str=“””。内爆(“,”,$arr)。"'";代码>
$sql = "SELECT * FROM `tableB` WHERE `id`= '2B' LIMIT 1";
$query = $db->query($sql);
$arr = explode(';', $row['features']);
$str = implode(",", $arr);
$sql2 = "SELECT * FROM `tableA WHERE id IN ({$str});";
$query2 = $db->query($sql2);
while ($row2 = mysql_fetch_array($query2)) {
$r[] = $row2['data'];
}