引用 | 編輯
chris710908
2008-08-13 20:59 |
樓主
▼ |
||
x0
想請問一下~目前在做搜尋頁面的部份假設我想要讓使用者下拉選單來進行搜尋 所以我資料庫的語法 SELECT * FROM channel_marketing WHERE (p_type =colname) OR (c_type =comtype) OR (c_name =comname) OR (year =s_year) OR (month =s_month) OR (week =s_week) 其中資料庫欄位對的是表單變數的值~我在搜尋頁面中設定表單傳送變數 而上面的資料庫查詢則是依據變數將資料show出來 只是上面的語法是針對使用者使用"單一欄位"作搜尋時 可以正確搜出資料(例如使用年份欄位2008),這樣他會把2008的資料撈出來 但是如果他選擇年份跟月份....這樣他就會聯集年份或月份的資料~假設我要2008-02的資料 他會將2008-03, 2006-02的資料也撈出來,但是這不是他想要的 他應該是要跑出交集的部份~2008年2月份的資料 不知道該怎麼下語法??可否請高手幫幫忙~謝謝 x0
|
引用 | 編輯
rubenjy
2008-08-13 21:15 |
1樓
▲ ▼ |
設一個變數
利用if 判斷where後面的條件式 在非null(或空白)時 將條件式加到變數裡面 然後再where 變數 去查詢你要的資料 x0 |
引用 | 編輯
chris710908
2008-08-14 10:55 |
2樓
▲ ▼ |
謝謝rubenjy大大~只是我不太會改...
其中下面的部份程式碼是主要判斷搜尋欄位的原始程式..我目前的改法只能針對某些搜尋條件然後寫死 例如限制c_name AND year AND month(三者作and~缺一不可) 另外在設定兩組or, 可以選擇c_type 或 p_type作搜尋~但是不能and 這樣感覺就是很沒有彈性.... $colname_search = "-1"; if (isset($_POST['C_name'])) { $colname_search = $_POST['C_name']; } $s_year_search = "-1"; if (isset($_POST['s_year'])) { $s_year_search = $_POST['s_year']; } $s_month_search = "-1"; if (isset($_POST['s_month'])) { $s_month_search = $_POST['s_month']; } $comtype_search = "-1"; if (isset($_POST['c_type'])) { $comtype_search = $_POST['c_type']; } $photype_search = "-1"; if (isset($_POST['p_type'])) { $photype_search = $_POST['p_type']; } mysql_select_db($database_mio, $mio); $query_search = sprintf("SELECT * FROM channel_marketing WHERE (c_name = %s AND year=%s AND month=%s) OR (c_type=%s) OR (p_type=%s)", GetSQLValueString($colname_search, "text"),GetSQLValueString($s_year_search, "int"),GetSQLValueString($s_month_search, "int"),GetSQLValueString($comtype_search, "text"),GetSQLValueString($photype_search, "text")); $search = mysql_query($query_search, $mio) or die(mysql_error()); $row_search = mysql_fetch_assoc($search); $totalRows_search = mysql_num_rows($search); x0 |
引用 | 編輯
chris710908
2008-08-14 14:09 |
3樓
▲ ▼ |
我後來利用表單變數的值來改變sql語法
假設我有廠商類別-廠商名稱-產品品牌-產品型號-年-月六個搜尋欄位,就要針對這六個欄位作排列組合.... 語法如下: mysql_select_db($database_mio, $mio); 我想這種方法應該是很笨的作法........可是不這樣作~我也不知道使用者會使用哪種欄位作搜尋 所以只能土法煉鋼.江可能的組合都打出來 請問還有什麼好方法嗎... x0 |
引用 | 編輯
aa
2008-08-30 09:33 |
4樓
▲ ▼ |
SELECT *
FROM channel_marketing WHERE (p_type =colname) OR (c_type =comtype) OR (c_name =comname) OR (year=s_year) OR (month =s_month) OR (week =s_week) 其實我的做法跟你最後的做法類似,只是可以精減一下.. 複製程式 $sqlwh=''; if ($colname) $sqlwh.=' OR p_type='$colname'; if ($comtype) $sqlwh.=' OR c_type='$comtype'; if ($comname) $sqlwh.=' OR c_name='$comname'; if ($s_year && $s_month) $sqlwh.=' OR (year='$s_year' AND month='$s_month')'; elseif ($s_year) $sqlwh.=' OR year='$s_year'; $sql = "SELECT * FROM sales WHERE 0 $sqlwh ORDER BY year ASC, month ASC"; x0 |
引用 | 編輯
chris710908
2008-08-30 12:14 |
5樓
▲ |
感謝aa站長鼎力相助^^
我去修改一下~謝謝 x0 |