2013-08-04 25 views
1

我需要通過查詢檢索產品可用性。我在使用的CMS是MODX。檢查產品的可用性

我的數據庫是這樣的:

攝像機
中間
模型
SKU

出租
CID
中期(這對應於從以上所述中旬)
start_date
end_date

我的查詢是根據是否「租用」來查找攝像頭的可用性。

用戶選擇他/她開始和結束日期,選擇「查找攝像機」和MySQL查詢看起來是這樣的:

$a = $modx->newQuery('Cameras'); 
    $a->leftJoin('Rentals','Rentals',array('Rentals.mid = Cameras.mid')); 
    $a->select(array('Rentals.start_date' <= $start_date(POST data from previous page))); 
    $a->select(array('Rentals.end_date' >= $end_date(POST data from previous page))); 
    $a->select(array('Cameras.*','Rentals.cid as customerid','Rentals.start_date as start')); 
    $availability = $modx->getCollection('Cameras',$a); 

    $ret = '<p>There are '. count($availability) . ' cameras available</p>'; 

我加了5個相機到數據庫中進行測試,並增加了一個爲租,但是查詢繼續返回'有5個相機可用'。它沒有拿起'預訂'的相機。

+1

我不熟悉modx,但我認爲你的查詢應該在'WHERE'子句中有'Rentals.start_date'和'Rentals.end_date'。看看這些文檔,我認爲你需要http://rtfm.modx.com/display/xPDO20/xPDOQuery.where和http://rtfm.modx.com/display/xPDO20/xPDOQuery.andCondition來執行'WHERE' /'和'。 – Sean

+0

謝謝@Sean這工作。這是我缺乏'where'條款。這些鏈接是非常有用的...現在書上標記:) – camelCase

回答

1

你應該拿起相機有Rentals.startdate> =結束日期 或者 Rentals.enddate < = STARTDATE

選擇之間< =或<取決於STARTDATE的語義(被包容與否)

+0

謝謝你的這個提示。與Sean的上述代碼結合使用時,代碼運行良好。 – camelCase