【问题标题】:Trying to create multidimensional array from mysql query, php?试图从 mysql 查询,php 创建多维数组?
【发布时间】:2016-12-07 02:59:49
【问题描述】:

试图将两个查询组合成数组。看看我的代码,首先,我想让所有的水果都有 cat A 和 val 好。第二,我会得到水果匹配第一个查询的标记,cat c 和 val 是好的还是坏的。最后,我想让它们像数组一样 $arg = ('苹果'=>'4','香蕉'=>'2','梨'=>'0');因为 pear 不匹配 val OK 或 bad,所以为 0。你有什么办法吗?欣赏。

<?php
/*
fruit  cat     val    mark
apple   A      good    V
apple   c       OK     4
banana  A      good     W
banana  c      bad     2
pear    A      good     W
pear    c      good     8
*/
$val1 = 'OK';
$val2 = 'bad';
$result1 = $wpdb->get_results( $wpdb->prepare("
	SELECT DISTINCT fruit FROM my_table WHERE cat ='A' AND val='%s' ",$val1));

$result2 = $wpdb->get_results( $wpdb->prepare("
	SELECT mark FROM my_table WHERE cat ='c' AND val='%s' AND fruit IN (SELECT DISTINCT fruit FROM my_table WHERE cat ='A' AND val='%s')",$val2,$val1));

/*how can I combine these two queries into an array like 
$arg = ('apple'=>'4','banana'=>'2','pear'=>'0');
because pear did not match, so 0
*/
?>

【问题讨论】:

    标签: php mysql arrays multidimensional-array


    【解决方案1】:

    最简单的解决方案是重写查询,而不是在php中手动进行,我认为这会做你想要的:

    SELECT
      t.fruit,
      CASE
        WHEN t.a_mark IS NOT NULL THEN t.a_mark
        WHEN t.c_mark IS NOT NULL THEN t.c_mark
        ELSE '0'
      END mark
    FROM
      (SELECT
        t.fruit,
        ( SELECT MAX(mark)
          FROM my_table
          WHERE fruit = t.fruit AND val = 'good' AND cat = 'A'
            AND mark NOT IN ('V', 'W')) a_mark,
        ( SELECT MAX(mark)
          FROM my_table
          WHERE fruit = t.fruit AND val in ('OK', 'bad') AND cat = 'c'
            AND mark NOT IN ('V', 'W')) c_mark  
      FROM
        (SELECT DISTINCT fruit FROM my_table) t
      ) t
    ORDER BY
      t.fruit
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-02
      • 2012-10-29
      • 2015-04-30
      • 2011-03-25
      • 1970-01-01
      • 2019-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多