php查詢條件
A. Thinkphp中order()使用方法詳解
ThinkPHP中的order方法用於對資料庫操作的結果進行排序,以下是其使用方法的詳解:
基本用法:
- order方法屬於模型的連貫操作方法之一,用於在資料庫查詢中添加排序條件。
- 相當於在sql的SELECT語句中添加一個ORDER BY子句。
- 例如:$Model>where>order>limit>select;,這條語句會查詢狀態為1的記錄,並按id欄位降序排列,取前5條記錄。
支持多個欄位排序:
- order方法支持對多個欄位進行排序。
- 例如:$Model>where>order>limit>select;,這條語句會先按id欄位降序排列,如果id相同,則按status欄位的默認值排列。
默認排序規則:
- 如果沒有在欄位後指定desc或asc排序規則,則默認為asc。
欄位與關鍵字沖突的處理:
- 如果排序的欄位名與MySQL的關鍵字有沖突,建議使用數組方式調用order方法。
- 例如:$Model>where>order)>limit>select;,這里假設order是欄位名,且與ORDER BY子句的關鍵字沖突,通過數組方式可以避免這種沖突。
常見問題及解決辦法:
- 問題:在order方法中直接使用字元串指定排序條件時,如果字元串中包含多餘的空格,可能會導致排序條件失效。
- 解決辦法一:確保order方法中的字元串不包含多餘的空格。例如,$order = "info.date2 desc";是正確的,而$order = " info.date2 desc ";是錯誤的。
- 解決辦法二:如果使用的是ThinkPHP的某個版本,且該版本存在此問題,可以嘗試修改ThinkPHP框架中的相關代碼。具體地,找到並修改ViewModel.class.php文件中處理order方法的代碼,確保在解析排序條件時去除多餘的空格。不過,這種方法需要修改框架代碼,可能會帶來維護上的不便,因此推薦在可能的情況下使用第一種解決辦法或等待官方修復。
綜上所述,order方法是ThinkPHP中用於資料庫查詢排序的重要方法,掌握其用法和注意事項對於提高開發效率至關重要。
B. php多條件查詢問題,怎麼過濾空值
是的正如你所說有兩種解決方案,第一種是採用PHP的方式,先判斷數據的合法性,比如是否提交了空值(推薦使用,沒有垃圾數據);第二種不做任何判斷,空值也能提交到資料庫,只是在SQL查詢時過濾空值數據(不推薦使用,有垃圾數據)。
解決方案1(通過PHP過濾空值數據):
if($_POST['欄位']=='')exit('<scripttype="text/javascript">alert("數據不合法!");history.back();</script>');//依此類推,逐一判斷表單$_POST數據
解決方案2(通過SQL查詢來過濾空值數據):
SELECT`欄位名`FROM`表名`WHERE`欄位1`NOTIN('',NULL)AND`欄位2`NOTIN('',NULL)...;
以上就是兩種解決方案,我推薦兩種方案組合使用,這樣確保萬無一失,如有問題歡迎追問~
C. php多條件查詢mysql並輸出的問題
php查詢mysql 多條件判斷輸出顯示
背景:
從mysql查詢各欄位值輸出並且按照條件用紅色字體顯示滿足條件欄位值。
條件:
1.syntime小於當前前一周時間的話顯示紅色。
2.A欄位為"無"的話,顯示紅色。
3.B欄位為"無"的話,顯示紅色。
圖一資料庫結構:
php查詢mysql 多條件判斷輸出展示 三聯
圖二資料庫各欄位值:
我的代碼:(我只滿足了第一個條件,其餘兩個條件不知道該怎麼來寫)
$sql = "select username, onoff, intime, syntime, device, a,b,person,dtime from cdmobile order by username desc ";
$rst = mysql_query($sql);
while($row=mysql_fetch_array($rst)){
$nowtime=strtotime('+7 day');
$syntime=strtotime($row['syntime']) ;
if($nowtime>=$syntime){
echo "{$row['username']}{$row['onoff']}{$row['intime']}{$row['syntime']}{$row['device']}
>{$row['a']}{$row['b']}{$row['person']}{$row['dtime']}";
}
else
echo "{$row['username']}{$row['onoff']}{$row['intime']}{$row['syntime']}{$row['device']}{$row['a']}{$row['b']}{$row['person']}{$row['dtime']}";
}
請各位大嬸幫忙完善一下代碼。要能同時滿足三個條件的,並且能正確輸出,該顯示紅色的地方顯示紅色。以下是目前的結果:
------解決方案--------------------
echo "{$row['username']}{$row['onoff']}{$row['intime']}";
if ($nowtime>=$syntime)
echo "{$row['syntime']}";
else
echo "{$row['syntime']}";
echo "{$row['device']}";
if ($row['a' ]== "無")
echo "{$row['a']}";
else
echo "{$row['a']}";
if ($row['b'] == "無")
echo "{$row['b']}";
else
echo "{$row['b']}";
echo "{$row['person']}{$row['dtime']}";
糾正下
D. thinkphp 資料庫查詢怎麼查
thinkphp如何查詢資料庫?
資料庫查詢
ThinkPHP內置了非常靈活的查詢方法,可以快速的進行數據查詢操作。
查詢條件可以用於CURD等任何操作,作為where方法的參數傳入即可。
ThinkPHP可以支持直接使用字元串作為查詢條件,但是大多數情況推薦使用索引數組或者對象來作為查詢條件,因為會更加安全。
查詢方式
一、使用字元串作為查詢條件
這是最傳統的方式,但是安全性不高,例如:
1
2
$User = M("User"); // 實例化User對象
$User->where('type=1 AND status=1')->select();
最後生成的SQL語句是
1
SELECT * FROM think_user WHERE type=1 AND status=1
二、使用數組作為查詢條件
1
2
3
4
5
$User = M("User"); // 實例化User對象
$condition['name'] = 'thinkphp';
$condition['status'] = 1;
// 把查詢條件傳入查詢方法
$User->where($condition)->select();
最後生成的SQL語句是
1
SELECT * FROM think_user WHERE 'name'='thinkphp' AND status=1
如果進行多欄位查詢,那麼欄位之間的默認邏輯關系是 邏輯與 AND,但是用下面的規則可以更改默認的邏輯判斷,通過使用 _logic 定義查詢邏輯:
1
2
3
4
5
6
$User = M("User"); // 實例化User對象
$condition['name'] = 'thinkphp';
$condition['account'] = 'thinkphp';
$condition['_logic'] = 'OR'; //定義查詢邏輯
// 把查詢條件傳入查詢方法
$User->where($condition)->select();
最後生成的SQL語句是
1
SELECT * FROM think_user WHERE 'name'='thinkphp' OR `account`='thinkphp'
三、使用對象方式來查詢 (這里以stdClass內置對象為例)
1
2
3
4
5
6
$User = M("User"); // 實例化User對象
// 定義查詢條件
$condition = new stdClass();
$condition->name = 'thinkphp';
$condition->status= 1;
$User->where($condition)->select();
最後生成的SQL語句和上面一樣
1
SELECT * FROM think_user WHERE `name`='thinkphp' AND status=1
使用對象方式查詢和使用數組查詢的效果是相同的,並且是可以互換的,大多數情況下,我們建議採用數組方式更加高效,後面我們會以數組方式為例來講解具體的查詢語言用法。
表達式查詢
上面的查詢條件僅僅是一個簡單的相等判斷,可以使用查詢表達式支持更多的SQL查詢語法,並且可以用於數組或者對象方式的查詢(下面僅以數組方式為例說明),查詢表達式的使用格式:
1
$map['欄位名'] = array('表達式','查詢條件');
表達式不分大小寫,支持的查詢表達式有下面幾種,分別表示的含義是:
1
2
3
4
$map['id'] = array('eq',100); id = 100;
$map['id'] = array('egt',100);id >= 100
$map['name'] = array('like','thinkphp%'); name like 'thinkphp%' 模糊查詢
$map['a'] =array('like',array('%thinkphp%','%tp'),'OR');$map['b'] =array('notlike',array('%thinkphp%','%tp'),'AND'); (a like '%thinkphp%' OR a like '%tp') AND (b not like '%thinkphp%' AND b not like '%tp')
本文來自ThinkPHP框架技術文章欄目:http://www.php.cn/phpkj/thinkphp/
以上就是thinkphp如何查詢資料庫的詳細內容,更多請關注php中文網其它相關文章!