引用 | 编辑
chris710908
2008-08-13 20:59 |
楼主
▼ |
||
![]() 假设我想要让使用者下拉选单来进行搜寻 所以我资料库的语法 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月份的资料 不知道该怎么下语法??可否请高手帮帮忙~谢谢 ![]()
|
引用 | 编辑
rubenjy
2008-08-13 21:15 |
1楼
▲ ▼ |
设一个变数
利用if 判断where后面的条件式 在非null(或空白)时 将条件式加到变数里面 然后再where 变数 去查询你要的资料 ![]() |
引用 | 编辑
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); ![]() |
引用 | 编辑
chris710908
2008-08-14 14:09 |
3楼
▲ ▼ |
我后来利用表单变数的值来改变sql语法
假设我有厂商类别-厂商名称-产品品牌-产品型号-年-月六个搜寻栏位,就要针对这六个栏位作排列组合.... 语法如下: mysql_select_db($database_mio, $mio); 我想这种方法应该是很笨的作法........可是不这样作~我也不知道使用者会使用哪种栏位作搜寻 所以只能土法炼钢.江可能的组合都打出来 请问还有什么好方法吗... ![]() ![]() |
引用 | 编辑
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"; ![]() |
引用 | 编辑
chris710908
2008-08-30 12:14 |
5楼
▲ |
感谢aa站长鼎力相助^^
我去修改一下~谢谢 ![]() |