0

これが私のコードのスニペットです:

$other_query = $this -> db -> query("SELECT EXISTS(SELECT 1 FROM shops WHERE cid=$cid AND zbid!=0 AND zbid!=$zbid)",__LINE__,__FILE__);
$this -> db -> output_vars["other_shops"] = $this -> db -> get_result($other_query); // 1 = there are other shops, 0 = no other shops
if($group["shop_create"] == 0){
    $my_shop = 3;
} else {            
    $my_shop_query = $this -> db -> query("SELECT EXISTS(SELECT 1 FROM shops WHERE cid=$cid AND zbid=$zbid LIMIT 1)",__LINE__,__FILE__);
    $my_shop = $this -> db -> get_result($my_shop_query) == 1 ? 1 : 2;
}

2 つのクエリを 1 つにまとめたいと思います。2 つのクエリの唯一の違いは、一方が行 wherezbid!=0 AND zbid!=$zbidをチェックするのに対し、もう一方は行 where をチェックすることzbid=$zbidです。ここでの他の問題は、ifステートメントです。また、その場合$group["shop_create"] == 0(つまり、この最初のコードでは 1 つのクエリのみが実行される)、結合されたクエリに余分な作業を行わせたくありません。

興味のある方のために説明すると、$this -> db -> get_result($query_resource)基本的には に相当するものを返しますmysql_result($query_resource,0)mysqlからに切り替えたときにこの機能を追加しましたmysqli

それが理にかなっていることを願っています!

4

1 に答える 1

0

「SELECT zbid FROM shop WHERE cid=$cid」を実行しないのはなぜですか?

次に、結果をループするために mysql_fetch_* と同等のものが必要になります。個人的には、それらを配列に保存し、後でテストを行います。

このようなもの:

$res = $this -> db -> query("SELECT zbid FROM shops WHERE cid=$cid",__LINE__,__FILE__);
$arr = array();
while ( $row = mysql_fetch_row($res) ) {
  $arr[] = $row[0];
}
$arr = array_diff($arr, array(0));

$this -> db -> output_vars["other_shops"] = count(array_diff($arr, array($zbid)) > 0 ? 1 : 0;

if($group["shop_create"] == 0){
    $my_shop = 3;
} else {            
    $my_shop = in_array($zbid, $arr) ? 1 : 2;
}
于 2012-08-23T15:51:03.700 に答える