Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 带分号分隔字符串的Mysql搜索_Php_Mysql - Fatal编程技术网

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`WHERE
id
IN({A76,A70,A07,A08,A15})`我编辑了代码。我使用的是query变量,而不是new_query。它现在应该可以工作了。嗯,你的$sql2仍然是原来的tho。我生成的查询是
SELECT*FROM
tableA`WHERE
id
IN(A76、A70、A07、A08、A15)`获取错误
您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解在“A76,A70,A07,A08,A15}”附近使用的正确语法。
查询如下所示:
SELECT*FROM
tableA`WHERE
id
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'];
}