私は、場所、物件の種類、建築業者に基づいて物件を検索できる不動産の Web サイトを持っています。
以下のようなテーブルがあります。
CREATE TABLE Project(ProjectId INT NOT NULL PRIMARY KEY AUTO_INCREMENT, 場所 VARCHAR(255)、 PropertyType VARCHAR(255), ビルダー VARCHAR(255)、 プロジェクト名 VARCHAR(255), ステータス TINYINT) INSERT INTO Project(場所、PropertyType、Builder、ProjectName) VALUES('ロケーション A', 'フラット', 'ビルダー A', 'プロジェクト A', 1), (「ロケーション A」、「ヴィラ」、「ビルダー B」、「プロジェクト B」、1)、 (「ロケーション B」、「フラット」、「ビルダー A」、「プロジェクト C」、1)、 (「ロケーション C」、「ヴィラ」、「ビルダー C」、「プロジェクト D」、1)、 ('ロケーション B', 'プロット', 'ビルダー B', 'プロジェクト E', 1), (「ロケーション A」、「長屋」、「ビルダー C」、「プロジェクト F」、1)、 ('場所 A', 'プロット', 'ビルダー A', 'プロジェクト G', 1), ('ロケーション C', 'プロット', 'ビルダー C', 'プロジェクト H', 1), ('ロケーション C', 'アパート', 'ビルダー B', 'プロジェクト I', 1), (「ロケーション C」、「ヴィラ」、「ビルダー B」、「プロジェクト J」、1)、 (「ロケーション A」、「ヴィラ」、「ビルダー A」、「プロジェクト K」、1)、 ('ロケーション C', 'フラット', 'ビルダー B', 'プロジェクト L', 1);
私が使用する検索手順は、彼らが選択したパラメータ、つまりプロパティタイプ、場所、ビルダー名に従って検索結果を返すような方法です
以下のように、いくつかの検索パラメータのプロジェクトがあるかもしれません
ロケーション C のビルダー A によるフラット
上記のような他の可能性を考慮して、where句のフィルターのパラメーターを変更して常に結果をもたらすように手順を変更したい
ロケーション C のビルダー A によるフラット
場所 C にはビルダー A のアパートがないため、他のビルダーによる場所 C のアパートを表示する必要があります。
場所 C アパートビルダー B プロジェクト I
フィルターは、PropertyType、場所、ビルダー名を考慮する必要があります
ロケーション B のヴィラ
ロケーション B にはヴィラがないため、
ロケーション A ヴィラ ビルダー B プロジェクト B ロケーション C ヴィラ ビルダー B プロジェクト J ロケーション A ヴィラ ビルダー A プロジェクト K
検索は
PropertyType -> 場所 -> ビルダー
その場所に特定のビルダーのプロジェクトがない場合
PropertyType -> 場所
特定の場所にプロジェクトがない場合
プロパティタイプ
フィルターのパラメーターは、検索パラメーターに同様の結果をもたらすような方法で削除する必要があります。
PropertyType -> Location -> Builder No Records PropertyType -> 場所 レコードなし PropertyType レコードが見つかりました
私が作成した手順は以下の通りです
存在する場合は手順を削除 getProjectResult; CREATE PROCEDURE getProjectResult(IN PropertyType VARCHAR(255), IN Location VARCHAR(255), IN BuilderName VARCHAR(255)) 始める SET @strSQL = 'SELECT * FROM プロジェクト WHERE ステータス = 1 '; IF PropertyType != '' THEN SET @strSQL = CONCAT(@strSQL, ' AND PropertyType ="', PropertyType, '" '); END IF; IF 場所 != '' THEN SET @strSQL = CONCAT(@strSQL, ' AND 場所 ="', 場所, '" '); END IF; IF BuilderName != '' THEN SET @strSQL = CONCAT(@strSQL, ' AND Builder ="', BuilderName, '" '); END IF; PREPARE stmt FROM @strSQL; EXECUTE ステートメント; DEALLOCATE PREPARE stmt; 終わり;
だから私の手順は以下のように出力をもたらすつもりです
CALL getProjectResult('Flats', 'Location C', 'Builder A');
出力なし
したがって、表示されるはずです
場所 C アパート ビルダー B プロジェクト L
結果をもたらすようにフィルターからパラメーターを削除するように手順を変更する方法。パラメータは、ビルダー、場所、プロパティ タイプの順に削除する必要があります。
プロパティの種類は、場所とビルダー名の後に優先順位を高くする必要があります
返信ありがとう