我有一個房地產網站,人們可以根據位置,物業類型和建築商搜索物業。從where子句刪除參數以顯示記錄
我有一個如下表。
CREATE TABLE Project(ProjectId INT NOT NULL PRIMARY KEY AUTO_INCREMENT, Location VARCHAR(255), PropertyType VARCHAR(255), Builder VARCHAR(255), ProjectName VARCHAR(255), Status TINYINT) INSERT INTO Project(Location, PropertyType, Builder, ProjectName) VALUES('Location A', 'Flats', 'Builder A', 'Project A', 1), ('Location A', 'Villas', 'Builder B', 'Project B', 1), ('Location B', 'Flats', 'Builder A', 'Project C', 1), ('Location C', 'Villas', 'Builder C', 'Project D', 1), ('Location B', 'Plots', 'Builder B', 'Project E', 1), ('Location A', 'Row House', 'Builder C', 'Project F', 1), ('Location A', 'Plots', 'Builder A', 'Project G', 1), ('Location C', 'Plots', 'Builder C', 'Project H', 1), ('Location C', 'Flats', 'Builder B', 'Project I', 1), ('Location C', 'Villas', 'Builder B', 'Project J', 1), ('Location A', 'Villas', 'Builder A', 'Project K', 1), ('Location C', 'Flats', 'Builder B', 'Project L', 1);
我使用的搜索過程是這樣一種方式,按照所給參數,他們選擇即物業類型,位置,構建名稱
現在有可能是項目的一些搜索它帶回的搜索結果參數如下位置C處
平底鞋由生成器
我想改變的過程以這樣的方式在where子句應該改變濾波器的參數考慮其他的可能性LIK帶來的結果所有的時間e計算在位置C中的上述
公寓由助洗劑
有在位置C處沒有公寓由助洗劑,所以應該由其他助洗劑
Location C Flats Builder B Project I
過濾器應在位置C處顯示公寓考慮屬性類型,位置和構建名稱
別墅在位置B處
沒有別墅在位置B上
Location A Villas Builder B Project B Location C Villas Builder B Project J Location A Villas Builder A Project K
搜索應由
PropertyType -> Location -> Builder
如果在該位置沒有項目特定生成器發生那麼
PropertyType -> Location
如果沒有項目的特定地點,然後
PropertyType
該p過濾器中的參數應該以這樣一種方式消除,它會爲搜索參數帶來類似的結果。
PropertyType -> Location -> Builder No Records PropertyType -> Location No Records PropertyType Records Found
我創建的過程爲
DROP PROCEDURE IF EXISTS getProjectResult; CREATE PROCEDURE getProjectResult(IN PropertyType VARCHAR(255), IN Location VARCHAR(255), IN BuilderName VARCHAR(255)) BEGIN SET @strSQL = 'SELECT * FROM project WHERE status = 1 '; IF PropertyType != '' THEN SET @strSQL = CONCAT(@strSQL, ' AND PropertyType ="', PropertyType, '" '); END IF; IF Location != '' THEN SET @strSQL = CONCAT(@strSQL, ' AND Location ="', Location, '" '); END IF; IF BuilderName != '' THEN SET @strSQL = CONCAT(@strSQL, ' AND Builder ="', BuilderName, '" '); END IF; PREPARE stmt FROM @strSQL; EXECUTE stmt; DEALLOCATE PREPARE stmt; END;
所以我的做法會帶來輸出如下
CALL getProjectResult('Flats', 'Location C', 'Builder A');
無輸出
所以應該顯示
Location C Flats Builder B Project L
如何通過這種方式更改過程,從過濾器中刪除參數以便帶來結果。 應按以下順序構建器,位置和屬性類型刪除參數。
房產類型應給予最高優先其次位置和建設者的名字
謝謝回覆
謝謝回覆。任何方式如何從where子句中刪除參數,以便我可能獲得records.you添加或生成器,但如果我沒有在該特定位置的屬性類型 – ArrayOutOfBound
,你可以做同樣的位置和屬性類型.. 通過添加或像 SET @wherequery + ='or(Location ='''+ @ Location +'''和PropertyType ='+ @ PropertyType +')' – Rusty
我想我的問題並不清楚。即使我提供了三個參數,可能有也可能不是所提供參數的記錄。因此,如果我提供CALL getProjectResult('Villas','Location C','Builder A'),參數不是空的,但它可能會也可能不會有記錄匹配參數 – ArrayOutOfBound