1

2 つの select ステートメントがあります。

1- select sm.id, IFNULL(sm.unit_price,0) as unit_price       
   from crm_stock_manager sm
   left join crm_purchase_order_items poi on poi.id = sm.purchase_order_item_id and  poi.is_del = 0
   left join crm_products p on poi.product_id = p.id and p.is_del = 0
   where sm.is_del = 0 and IFNULL(sm.unit_price, '') != '' and p.id = 253 order by sm.created_on;

2- select 0 as id ,price as unit_price from crm_products where id = 253  and is_del=0;

最初の選択ステートメントが空の結果を返す場合は、2 番目の選択ステートメントを実行します。

私を助けてください。

4

3 に答える 3

5

これは、私が行った簡単なテストから機能しているように見え、x=1 の存在を 2 回チェックする必要がなくなります。

SELECT SQL_CALC_FOUND_ROWS *
FROM mytable
WHERE x = 1

UNION ALL

SELECT *
FROM mytable
WHERE 
FOUND_ROWS() = 0 AND x = 2;

もう 1 つの方法は、EXISTS または NOT EXISTS を使用したサブクエリです。

SELECT column1 FROM t1 WHERE NOT EXISTS (SELECT * FROM t2);
于 2013-02-27T05:40:43.773 に答える
1

あなたはこのようにすることができます

$query1 = mysql_query("YOUR QUERY");
$row_count = mysql_num_rows($query1);
if($row_count==0) {
 $query1 = mysql_query("Your Second Query");
}

関数は減価償却されているため、使用しないでくださいmysql_*

お役に立てれば

于 2013-02-27T06:39:53.097 に答える
1

NULLcrm_products.priceかどうかを選択する必要がある場合は、 2 つのクエリを使用する必要はありません。ステートメントの最初の部分を次のように変更し、必要に応じて他の部分を変更して、必要な結果を得ることができます。srm_stock_manager.unit_priceCOALESCESELECT

SELECT sm.id, COALESCE(sm.unit_price, p.price) unit_price FROM...

これは、NULL のp.price場合に値を返します。sm.unit_price

さらに、mysql docを参照してください。

于 2013-02-27T06:03:51.937 に答える