我有两张这样的桌子
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 = "SELECT * FROM `tableB` WHERE `id`= '2B' LIMIT 1";
$query = $db->query($sql);
while ($row = mysql_fetch_array($query)) {
$arr = explode(';', $row['features']);
for ($i = 0; $i < sizeof($arr); $i++)
{
$sql2 = "SELECT * FROM `tableA` WHERE `id`="'.$arr[$i].'"";
$query2 = $db->query($sql2);
while ($row2 = mysql_fetch_array($query2)) {
$r[] = $row2['data'];
}
}
}
print_r($r);
有没有一种方法可以在mysql中实现这一点,在这里我将table中的列与table中的id相匹配?或者不使用嵌套循环?表现是关键。因为两个表都有超过25k行的数据。
提前谢谢
最佳答案
看看这个代码。减少了几个循环。
$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'];
}
关于php - Mysql搜索用半冒号分隔的字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24669714/