广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 6343 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为IE收藏   收藏主题   上一主题 | 下一主题   
chris710908 手机 会员卡
个人文章 个人相簿 个人日记 个人地图
知名人士
级别: 知名人士 该用户目前不上站
推文 x15 鲜花 x128
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
推文 x0
[PHP][求助] 请问mysql中进阶查询的语法如何下?
想请问一下~目前在做搜寻页面的部份
假设我想要让使用者下拉选单来进行搜寻

所以我资料库的语法

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月份的资料

不知道该怎么下语法??可否请高手帮帮忙~谢谢


[ 此文章被chris710908在2008-08-14 14:11重新编辑 ]



献花 x0 回到顶端 [楼 主] From:台湾中华电信HINET | Posted:2008-08-13 20:59 |
rubenjy
数位造型
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x2 鲜花 x24
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

设一个变数
利用if 判断where后面的条件式
在非null(或空白)时
将条件式加到变数里面
然后再where 变数 去查询你要的资料


献花 x0 回到顶端 [1 楼] From:台湾数位联合 | Posted:2008-08-13 21:15 |
chris710908 手机 会员卡
个人文章 个人相簿 个人日记 个人地图
知名人士
级别: 知名人士 该用户目前不上站
推文 x15 鲜花 x128
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

谢谢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 回到顶端 [2 楼] From:台湾中华电信HINET | Posted:2008-08-14 10:55 |
chris710908 手机 会员卡
个人文章 个人相簿 个人日记 个人地图
知名人士
级别: 知名人士 该用户目前不上站
推文 x15 鲜花 x128
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

我后来利用表单变数的值来改变sql语法

假设我有厂商类别-厂商名称-产品品牌-产品型号-年-月六个搜寻栏位,就要针对这六个栏位作排列组合....

语法如下:

mysql_select_db($database_mio, $mio);
$add_sql = "or (c_name =c_name)";
//判断查询栏位
//item 6
if($_POST['s_name']!='' and $_POST['s_brand']!='' and $_POST['p_name']!='' and $_POST['s_year']!='' and $_POST['s_month']!='' and $_POST['s_month2']!=''){
$add_sql = "or (c_name ='".$_POST['s_name']."' AND brand= '".$_POST['s_brand']."' AND p_name= '".$_POST['p_name']."' AND year =".$_POST['s_year']." AND month BETWEEN ".$_POST['s_month']." AND ".$_POST['s_month2'].")";
}

//item 5
else if($_POST['s_name']!='' and $_POST['s_brand']!='' and $_POST['s_year']!='' and $_POST['s_month']!='' and $_POST['s_month2']!=''){
$add_sql = "or (c_name ='".$_POST['s_name']."' AND brand= '".$_POST['s_brand']."' AND year =".$_POST['s_year']." AND month BETWEEN ".$_POST['s_month']." AND ".$_POST['s_month2'].")";
}
................以此类推

$query_search = "SELECT * FROM sales WHERE 0 $add_sql ORDER BY year ASC, month ASC";
$query_limit_search = sprintf("%s LIMIT %d, %d", $query_search, $startRow_search, $maxRows_search);
$search = mysql_query($query_limit_search, $mio) or die(mysql_error());
$row_search = mysql_fetch_assoc($search);


我想这种方法应该是很笨的作法........可是不这样作~我也不知道使用者会使用哪种栏位作搜寻

所以只能土法炼钢.江可能的组合都打出来

请问还有什么好方法吗... 表情


[ 此文章被chris710908在2008-08-30 00:50重新编辑 ]


献花 x0 回到顶端 [3 楼] From: | Posted:2008-08-14 14:09 |
aa 手机 会员卡 葫芦墩家族
个人文章 个人相簿 个人日记 个人地图 个人商品
特殊贡献奖 社区建设奖
头衔:            
站长
级别: 站长 该用户目前不上站
推文 x1964 鲜花 x5260
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

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 回到顶端 [4 楼] From:台湾新世纪资通股份有限公司 | Posted:2008-08-30 09:33 |
chris710908 手机 会员卡
个人文章 个人相簿 个人日记 个人地图
知名人士
级别: 知名人士 该用户目前不上站
推文 x15 鲜花 x128
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片

感谢aa站长鼎力相助^^
我去修改一下~谢谢


献花 x0 回到顶端 [5 楼] From: | Posted:2008-08-30 12:14 |

首页  发表文章 发表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.066786 second(s),query:16 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言