2016-08-01 7 views
2

2つのクエリを配列に結合しようとしています。私のコードを見て、まず、すべてのフルーツを取得したいと思います。第二に、私はフルーツが最初のクエリ、cat cとvalのどちらかがOKか悪いかに一致するマークを取得します。最後に、私はそれらを $ arg =( 'apple' => '4'、 'banana' => '2'、 'pear' => '0')のように配列したいと思います。梨はvalにマッチしなかったのでOKか悪いので、0。それを行う方法はありますか?感謝する。 mysql query、phpから多次元配列を作成しようとしていますか?

<?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(" 
 
\t SELECT DISTINCT fruit FROM my_table WHERE cat ='A' AND val='%s' ",$val1)); 
 

 
$result2 = $wpdb->get_results($wpdb->prepare(" 
 
\t 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 
 
*/ 
 
?>

答えて

0

最も簡単な解決策ではなく、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 
関連する問題