Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.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_Arrays_Implode - Fatal编程技术网

Php 在MySQL查询中使用数组结果

Php 在MySQL查询中使用数组结果,php,mysql,arrays,implode,Php,Mysql,Arrays,Implode,我有以下疑问: $query_q_pass = sprintf("SELECT * FROM answers INNER JOIN users WHERE a_id = %s and answers.user_id = users.user_id"); $q_pass = mysql_query($query_q_pass, $cd) or die(mysql_error()); $row_q_pass = mysql_fetch_assoc($q_pass); 现在,上面查询的答案表中有一行

我有以下疑问:

$query_q_pass = sprintf("SELECT * FROM answers INNER JOIN users WHERE a_id = %s and answers.user_id = users.user_id");
$q_pass = mysql_query($query_q_pass, $cd) or die(mysql_error());
$row_q_pass = mysql_fetch_assoc($q_pass);
现在,上面查询的答案表中有一行品牌url,其中有许多不同的值,用逗号分隔,例如戴尔、微软、惠普、

我要做的是从品牌url行中选择所有这些值,并将它们添加到另一个查询中,我将提取品牌url中存在的所有品牌。这是另一个查询:

$query_conn_brands = 'SELECT * FROM brands WHERE brand_url = 'VALUE FROM ABOVE QUERY'';
$conn_brands = mysql_query($query_conn_brands, $cd) or die(mysql_error());
$row_conn_brands = mysql_fetch_assoc($conn_brands);
$totalRows_conn_brands = mysql_num_rows($conn_brands);
我尝试了许多不同的方法使用数组,但我得到的都是来自品牌表的结果。这是我最后一次失败的尝试:

$brand_pass_ids = $row_q_pass['brand_id'];
$array = array($brand_pass_ids,);

$query_conn_brands = 'SELECT * FROM brands WHERE brand_url IN (' . implode(',', array_map('intval', $array)) . ')';
$conn_brands = mysql_query($query_conn_brands, $cd) or die(mysql_error());
$row_conn_brands = mysql_fetch_assoc($conn_brands);
$totalRows_conn_brands = mysql_num_rows($conn_brands);
从上面的例子中,我得到的是所有来自品牌表的结果,而不仅仅是答案表中存在的结果。我真的希望有人能帮我


非常感谢

它失败的原因是因为您的查询如下所示:

SELECT * FROM brands WHERE brand_url IN (dell,microsoft,hp)
有字符串值,因此它们必须作为字符串处理。尝试:

implode(",",array_map(function($a) {return json_encode($a);},$array))
虽然编码为JSON看起来很疯狂,但实际上这是一个不错的选择。字符串用引号括起来并根据需要转义,数字保持原样,
null
也得到正确处理

编辑:对于不支持匿名函数的旧版本PHP:

implode(",",array_map(create_function('$a','return json_encode($a);'),$array));
使用MySQL的功能:

如果字符串
str
位于由N个子字符串组成的字符串列表
strlist中,则返回1到
范围内的值。字符串列表是由“
”字符分隔的子字符串组成的字符串。如果第一个参数是常量字符串,第二个参数是类型为的列,则该函数将优化为使用位算术。如果
str
不在
strlist
中,或者
strlist
为空字符串,则返回
0
。如果任一参数为
NULL
,则返回
NULL
。如果第一个参数包含逗号(“
”)字符,则此函数无法正常工作

mysql> SELECT FIND_IN_SET('b','a,b,c,d'); -> 2 但如果需要,您可以将查询连接在一起:

SELECT *
FROM   answers
  JOIN users  USING (user_id)
  JOIN brands ON FIND_IN_SET(brands.brand_url, answers.brand_url)
WHERE a_id = %s

有了这些代码,我得到了以下错误解析错误:语法错误,意外的T_函数,在Z:\www\answers\q.php第86行的“')是的,当我在brand_url行中只有一个结果时,我得到了结果,但是当我有多个结果时,例如dell、microsoft、hp,。。。我一点也没有results@Kolink:为什么不干脆
array\u-map('json\u-encode',$array)
?手动创建的函数什么也得不到,而且浪费内存。@DCoder,因为我混淆了
array\u map
array\u walk
中传递给回调函数的参数数量。这就是说,这种方式可以方便地向
json\u encode
@Kolink添加更多参数,那么如果brands\u id行中有不止一个结果,如何使其工作呢?请停止使用古老的MySQL扩展编写新代码:它不再被维护,社区已经开始更新。相反,您应该使用改进的扩展或抽象层。
SELECT *
FROM   answers
  JOIN users  USING (user_id)
  JOIN brands ON FIND_IN_SET(brands.brand_url, answers.brand_url)
WHERE a_id = %s