這似乎是一個如此簡單的任務,但我很難找到我喜歡的解決方案。除了笨重之外,我找不到任何其他的東西。以下是我正在處理的內容:基於發佈的變量構建MySQL查詢
有一個將變量發佈到處理腳本的搜索表單。這些變量是被查詢數據的過濾器。取決於用戶的權限,可能會有更多或更少的變量進入,具體取決於他們可以訪問的過濾器。基本上,每個過濾器都是指表格中結果來自的一個字段。每個過濾器的一個選項也是「ANY」,所以不需要WHERE子句。
什麼是構建查詢字符串的好方法。假設有四個變量返回:$ firstname,$ lastname,$ age,$ dob。但只有一些用戶可以通過$ age和$ dob進行過濾。
$query = "SELECT * FROM people";
if(($firstname != 'ANY' && !empty($firstname)) ||
($lastname != 'ANY' && !empty($lastname)) ||
($age != 'ANY' && !empty($age)) ||
($dob != 'ANY' && !empty($dob))) {
$query .= " WHERE";
}
if($firstname != 'ANY' && !empty($firstname)) {
$query .= " firstname='$firstname'";
}
if($lastname != 'ANY' && !empty($lastname)) {
if($firstname != 'ANY' || !empty($firstname)) {
$query .= " AND";
}
$query .= " lastname='$lastname'";
}
...
依此類推。但對我來說,這看起來很愚蠢,可怕,而且效率低得可笑。我正在使用稍微修改過的MVC模式,那麼爲每個可能的過濾器構建搜索模型中的方法是否合理?
作爲一個側面說明,您可以完成,但縮小了空間,請指定您的字段,而不是使用*。 – 2009-08-07 14:55:31