iT邦幫忙

0

請問php 和 sql 如何做複數條件的搜尋

請問php 和 sql 如何做複數條件的搜尋呢,例如我想要先選日期再輸入文字搜尋,or 先輸入種類再輸入文字搜尋。有搜尋網路上的資訊 複數條件搜尋 沒找到相關資訊。請各位能給個方向謝謝

22
pail
iT邦新手 4 級 ‧ 2009-05-26 17:41:44
最佳解答

先啃一下基本的 SQL Command?!

ex: select xxx from Table where 條件A AND 條件B OR .....

kane18456 iT邦新手 5 級 ‧ 2009-05-27 09:51:39 檢舉

謝謝 我會再查清楚一點

20
pcboy
iT邦高手 1 級 ‧ 2009-05-26 17:45:45

你是希望選了某條件後,另一個條件可選項目會自動依據之前選的條件而變動嗎? 除了 PHP和SQL,妳還要會 JavaScript (或 DHTML 或 AJAX),給你個範例參考

JavaScript 關聯列表的實現(簡單的和複雜的)

<HTML>
<HEAD>
<TITLE> 動態刷新實例 </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="wangrw">
<META NAME="Description" CONTENT="一個動態刷新的實例">
</HEAD>
<script language="JavaScript" type="text/JavaScript" >
/**//* 用來保存所有下拉條中的數據*/
var vMainMenus = new Array();

/**//**
* 初始化各菜單項,及初始化主菜單和相應的子菜單項
* 這個函數的內容可以方便的由服務器端程序生成。
*
*/
function initList(){
var i = 0;
var j = 0;
// 產生一個新的子菜單數組
var subs = new Array();
// 子菜單的第一個元素是主菜單的標題
subs[j++] = "---";
// 子菜單的選項是從第二個元素,即 index = 2 開始的
subs[j++] = "---";
// 將子菜單添加第主菜單中
vMainMenus[i++] = subs;

// 重新產生一個新的子菜單數組
var subs = new Array();
j=0;
subs[j++] = "Java";
subs[j++] = "Java 基礎知識";
subs[j++] = "Java GUI 設計";
subs[j++] = "Java 企業級設計";
subs[j++] = "Java 嵌入式設計";
vMainMenus[i++] = subs;

// 重新產生一個新的子菜單數組
subs = new Array();
j = 0;
subs[j++] = "C/C++";
subs[j++] = "C/C++ 基礎";
subs[j++] = "C++ STL";
subs[j++] = "Visual C++";
subs[j++] = "C++ Builder";
vMainMenus[i++] = subs;

// 重新產生一個新的子菜單數組
subs = new Array();
j = 0;
subs[j++] = "Scripts";
subs[j++] = "JavaScript/JScript";
subs[j++] = "VBScript";
subs[j++] = "Perl";
vMainMenus[i++] = subs;
}
/**//**
* 初始化主菜單
*
* @param mainList 主菜單列表框
*/
function initMainList(mainList){
for (i = 0; i < vMainMenus.length; ++i) {
mainList.options[i] = new Option(vMainMenus[i][0], i);
}
}
/**//*
* 初始化子菜單
*
* @param mainList 主菜單列表框
* @param subList 子菜單列表框
*/
function initSubList(mainList,subList){
var idx = mainList.selectedIndex;
var subs = vMainMenus[idx];
subList.length = 0;
for (var i = 0, j = 1; j < subs.length; ++i, ++j) {
subList.options[i] = new Option(subs[j], i);
}
}
/**//**
* 初始化
*
* @param mainList 主菜單列表框
* @param subList 子菜單列表框
*/
function load(mainList,subList){
initList();
initMainList(mainList);
initSubList(mainList,subList);
}

</script>
<BODY>
<form action="" method="post" name="formLists" id="formLists">
<!-- 當主菜單的選擇改變時,調用 initSubList(MainList, subList) 函數,並傳入正確參數 -->
<select name="mainMenu" id="mainMenu" onChange="initSubList(this, this.form.subMenus);">
</select>
<select name="subMenus" id="subMenus">
</select>
</form>
<script language="JavaScript" type="text/JavaScript">
// 調用 load 進行初始化
load(document.all.formLists.mainMenu, document.all.formLists.subMenus);
</script>
這個是簡單的列表,用於select中「顯示內容」和「value值"相等的情況,不相等的見下一個例子
</BODY>
</HTML>

pcboy大大
建議您下次貼程式碼時可以使用[CODE]標籤
格式會比較好看
謝謝

kane18456 iT邦新手 5 級 ‧ 2009-05-27 09:52:46 檢舉

謝謝你 以我新手來說 這樣清楚的回答讓我比較快入手

20
fillano
iT邦超人 1 級 ‧ 2009-05-26 20:20:32

不知道你的困難點在哪裡...

如果你是希望有彈性地組出SQL,也就是說想要依照傳入的搜尋條件組出SQL,那我以前想過這個問題:
http://fillano.blog.ithome.com.tw/post/257/11075

不過ZendFramework裡面有更好的實作:
http://framework.zend.com/manual/en/zend.db.select.html

最近在研究CodeIgniter,它的ActiveRecord類別也有類似功能:(繁中的文件還沒翻好,先看英文的吧)
http://codeigniter.com/user\_guide/database/active\_record.html

使用這種方式的好處是,可以隨時把條件傳給它,最後它會組出正確的SQL來做查詢。SQL有固定的格式,但是程式邏輯不一定與SQL的結構一致,所以用這個方式可以簡化程式,不必顧慮SQL的結構,只要把適當的條件跟動作給它就可以了。

另外還考慮過要怎樣可以有彈性地增加查詢條件,而不用大幅更改程式:
http://fillano.blog.ithome.com.tw/post/257/16210

以上幾個心得給你參考,希望有一些幫助。如果只是怎樣寫SQL的問題,那...以後再來看看吧。

如果fillano大大回顧一下他先前的問題
就知道你的答案
真是....太超過了

fillano iT邦超人 1 級 ‧ 2009-05-27 09:46:22 檢舉

他其實也沒把問題講清楚,所以就把之前解決問題的想法分享一下,反正亂槍打鳥...就矇著眼打幾槍看看

kane18456 iT邦新手 5 級 ‧ 2009-05-27 09:54:51 檢舉

謝謝你 我是個新手 問的問題對你們來說其實只是入門的問題,但能有你這麼多的參考資料也讓我比較快的能入手

我要發表回答

立即登入回答