1

numrows を実行する代わりに、1 つのクエリで以下を実行できるかどうかを知っている人はいますか?

$select1 = "SELECT service FROM UPSServices WHERE code = '$serviceCode' AND ship_from_code = '$shipFrom'";

$result = mssql_query($select1);

//print_r($result);

if(mssql_num_rows($result) == 0) {
    $select2 = "SELECT service FROM UPSServices WHERE code = '$serviceCode' AND ship_from_code IS NULL";
    $result = mssql_query($select2);
}

while ($service = mssql_fetch_array($result)) {
    return $service['0'];
}
4

2 に答える 2

1

SQL Server を使用しているので、これを行うことができます。予想よりも少し複雑です。次のバージョンは、有効な値の数をカウントします。これが 0 より大きい場合、NULL は除外されます。

select service    
from (SELECT service,
             count(ship_from_code) over () as NumValues
      FROM UPSServices
      WHERE code = '$serviceCode' AND (ship_from_code = '$shipFrom' OR ship_from_code IS NULL) 
    ) t
where (NumValues > 0 and service is not NULL) or (NumValues = 0 and service is NULL)
limit 1
于 2012-12-12T15:14:36.340 に答える
0

指定されたshipCodeが存在しない場合は、NULL shipCodeの値が必要だと思います

SELECT service FROM UPSServices WHERE 
code = '$serviceCode' AND (ship_from_code = '$shipFrom' OR ship_from_code IS NULL) 
ORDER BY ship_from_code"

Order by は、発送コードが存在する場合は一番上にあることを確認します

于 2012-12-12T13:51:18.693 に答える