這時候最好不要在數(shù)據(jù)模型上操作,而是在邏輯模型上操作。
專注于為中小企業(yè)提供成都做網站、網站設計服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)鳳泉免費做網站提供優(yōu)質的服務。我們立足成都,凝聚了一批互聯(lián)網行業(yè)人才,有力地推動了上1000家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網站建設實現(xiàn)規(guī)模擴充和轉變。
也就是說,數(shù)據(jù)模型(Data Model)任然是一個模型對應一張表。而在數(shù)據(jù)模型和控制器間,再插入一個邏輯模型(Logic Model),通過邏輯模型(邏輯模型操作多個數(shù)據(jù)模型)完成一些邏輯操作(如下單等等)。
這樣能保證整體架構的清晰。
select * from databasea.table1 union select * from databaseb.table2 ;
不推薦垮庫使用.弊端太多
?php
$link_A=mysql_connect("localhost:917","root","skcg1024",true);
mysql_select_db("db_a",$link_A);
$link_B=mysql_connect("localhost:917","root","skcg1024",true);
mysql_select_db("db_a",$link_B);
print_r($link_A);
print_r($link_B);
mysql_connect的第四個參數(shù)設置成true,表示創(chuàng)建一個新的連接
這樣你就獲得咯兩個數(shù)據(jù)庫連接,然后指定對應的數(shù)據(jù)庫即可。但不建議這么做
建議采用數(shù)據(jù)庫.數(shù)據(jù)表的格式?訪問存儲數(shù)據(jù),代碼簡練,邏輯清楚
在PHP-FPM處理HTTP請求時,有時會遇到一個請求需要進行多次MySQL查詢(在報表類應用中比較常見)。通常我們會以串行方式查詢:
$link?=?new?mysqli();
$rs1?=?$link-query('SELECT?*?FROM?table1');
while?($row?=?$rs1-fetch_row())?{?...?}
$rs2?=?$link-query('SELECT?*?FROM?table2');
while?($row?=?$rs2-fetch_row())?{?...?}
$rs3?=?$link-query('SELECT?*?FROM?table3');
while?($row?=?$rs3-fetch_row())?{?...?}
串行查詢方式有個缺點:在MySQL返回數(shù)據(jù)之前,PHP一直是處于空等的狀態(tài),不會繼續(xù)往后執(zhí)行。如果數(shù)據(jù)量大或者查詢復雜,MySQL響應可能會比較慢,那么以串行方式查詢會有一些延遲。給用戶最直接的感受就是 Loading… 的圈圈一直打轉。
那么有什么辦法可以減少查詢MySQL的時間?用多進程并行查詢不行,因為PHP-FPM 中不允許用 pcntl_fork 一類的調用。
幸好還有 mysqlnd,mysqlnd提供了類似 stream_select 的機制(見 這篇文章) ,可以做到在單進程中對MySQL并行查詢。這主要運用了mysqli_poll 和 reap_async_query 兩個函數(shù)。
還是通過例子來介紹MySQL并行查詢的實施方法。假設要并行地向MySQL發(fā)出10個查詢,最基本的代碼應該是這樣的:
1.??$links?=?[];
2.??for?($i?=?0;?$i?!==?10;?$i++)?{
3.??????$links[$i]?=?new?mysqli('127.0.0.1',?'user',?'password',?'db1');
4.??????$links[$i]-query('SELECT?SLEEP(1)',?MYSQLI_ASYNC);
5.??}
6.??$allResult?=?[];
7.??while?(!empty($links))?{
8.??????$reads?=?$links;
9.??????$errors?=?$reject?=?[];
10.?????if?(!mysqli_poll($reads,?$errors,?$reject,?null))?{
11.?????????continue;
12.?????}
13.?????foreach?($reads?as?$read)?{
14.?????????$idx?=?array_search($read,?$links,?true);
15.?????????$allResult[$idx]?=?[];
16.?????????$result?=?$read-reap_async_query();
17.?????????while?($row?=?$result-fetch_row())?{
18.?????????????$allResult[$idx][]?=?$row;
19.?????????}
20.?????????$read-close();
21.?????????unset($links[$idx]);
22.?????}
23.?}
解釋下這段代碼的含義:
2~5行,同時發(fā)起10個MySQL連接,并發(fā)出查詢
注意query() 的第二個參數(shù)帶上了 MYSQLI_ASYNC 表示非阻塞查詢
10行,使用mysqli_poll 輪詢10個連接的查詢有無返回
mysqli_poll 的第一個參數(shù)$reads是個數(shù)組,包含需要輪詢那些連接。mysqli_poll 執(zhí)行完后,會改寫$reads,改寫后$reads包含的是那些已經有數(shù)據(jù)返回連接。
mysqli_poll的第四個參數(shù),控制的是輪詢的等待時間,單位是“秒”。如果像本例當中設置為null,那么mysqli_poll輪詢是阻塞的:只有監(jiān)聽的連接中,任意一個連接有數(shù)據(jù)返回了,mysqli_poll才會返回。如果等待時間設置為0,那么每次執(zhí)行mysqli_poll會立即返回,外層的while會頻繁循環(huán)。
第11~19行,遍歷已經有數(shù)據(jù)返回的連接
reap_async_query和普通query一樣,返回的是mysqli_result,可以一行行fetch數(shù)據(jù)
20~21行,對于已經獲得了數(shù)據(jù)的連接,下次mysqli_poll就不需要再輪詢這個連接了,所以關閉連接,并從$links數(shù)組刪除這個連接
當所有的連接都返回了數(shù)據(jù),$links數(shù)組空了,while循環(huán)也就終止了。
使用并行查詢的方式,可以大大縮短處理HTTP請求的時間,假設本例中的10個SQL查詢,每個需要執(zhí)行1秒。因為是并行,處理所有的查詢,也只需要1秒左右。
用原生sql
$Model = new Model();
$sql = 'select A.id,A.name,A.age,B.id bid,B.class from A,B,where A.id=B.uid and B.id not in(select c.uid from c)';
$ret = $Model-query($sql);
$ret是一個二維數(shù)組,m行n列的
PHP+Mysql多條件多值查詢示例代碼:
index.html代碼:
!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " htmlheadmeta http-equiv="Content-Type" content="text/html; charset=UTF-8"titleSQL多條件查詢示例/title/headbodyform method="post" action="deal.php"h1房屋出租/h1房屋類型:select name="type"option value="1"一居室/optionoption value="2"二居室/optionoption value="3"三居室/option/select面積:input name="area" type="text"/地址:input name="addr" type="text"/input name="btn" type="submit" value="搜索" //form/body/html
deal.php文件:
?php//連接數(shù)據(jù)庫$conn=mysql_connect("localhost","root",""); //選擇數(shù)據(jù)庫$db=mysql_select_db("數(shù)據(jù)庫名"); //接收 參數(shù)$type=$_POST['type'];$area=$_POST['area'];$addr=$_POST['addr']; //SQL語句主題$query="select * from room where "; //根據(jù)條件和傳的值拼接sql語句//判斷面積不為空if($type!=""){ //然后根據(jù)具體面積分情況拼接 switch($type){ case 1: //一居室 $query.=" room_type=1"; break; case 2: $query.=" room_type=2"; break; case 3: $query.=" room_type=3"; break; }} //面積if($area!=""){ $query.=" and area ={$area}";} //地址if($addr!=""){ $query.=" and addr like '%{$addr}%'"; //地址} //執(zhí)行查詢$result=mysql_query($query); //遍歷結果echo "搜搜結果如下:";while($row=mysql_fetch_array($result)){ echo "地址:".$row['addr']; echo ""; echo "面積:".$row['area']; echo ""; echo "居室:".$row['type']; echo ""; echo "價格:".$row['addr']; echo ""; //等等} ?
分享名稱:php數(shù)據(jù)庫多表操作 數(shù)據(jù)庫表多對多建表
當前路徑:http://muchs.cn/article16/hheddg.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站維護、Google、軟件開發(fā)、做網站、品牌網站制作、商城網站
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)