2016-08-01 3 views
2

배열에 두 개의 쿼리를 결합하려고합니다. 내 코드를 봐, 먼저 모든 과일을 얻고 싶다. 고양이 A와 밸런스가 좋다. 둘째, 과일이 첫 번째 쿼리와 일치하는지, 고양이 c와 발이 좋든 나쁘 든간에 점수를 얻습니다. 마침내, 나는 그것들을 배열처럼 만들고 싶다. $ arg = ('apple'=> '4', 'banana'=> '2', 'pear'=> '0'); 배가 좋아요, 나쁘지 않으므로 배가 일치하지 않았으므로 0입니다. 할 수있는 방법이 있습니까? 고맙습니다. mysql 쿼리, 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 
관련 문제