我有两张这样的桌子

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/

10-09 08:00