你是希望選了某條件後,另一個條件可選項目會自動依據之前選的條件而變動嗎? 除了 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>
不知道你的困難點在哪裡...
如果你是希望有彈性地組出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的問題,那...以後再來看看吧。