php查詢多表查詢
㈠ php多表查詢
親,按照你報的這個錯來看,$res並不是有個有效的結果資源,什麼意思呢?
就是說mysql_fetch_array()的參數需要一個有效的MySQL查詢結果資源,你給的參數缺不是。
為什麼會這樣呢?可以看到,你用mysql_query()查詢的結果賦給了$res,按理說這個結果應該就是結果資源,這樣看來,問題肯定出在了$res上了。
建議:題主執行 var_mp($res);,看看結果是什麼,搞不好是false,查詢就出錯了。
建議列印出$res,題主列印後還是不能解決問題,可繼續追問我哦。
㈡ PHP + Mysql多個表並行查詢如何實現
在PHP-FPM處理HTTP請求時,有時會遇到一個請求需要進行多次MySQL查詢(在報表類應用中比較常見)。通常我們會以串列方式查詢:
$link=newmysqli();
$rs1=$link->query('SELECT*FROMtable1');
while($row=$rs1->fetch_row()){...}
$rs2=$link->query('SELECT*FROMtable2');
while($row=$rs2->fetch_row()){...}
$rs3=$link->query('SELECT*FROMtable3');
while($row=$rs3->fetch_row()){...}
串列查詢方式有個缺點:在MySQL返回數據之前,PHP一直是處於空等的狀態,不會繼續往後執行。如果數據量大或者查詢復雜,MySQL響應可能會比較慢,那麼以串列方式查詢會有一些延遲。給用戶最直接的感受就是 Loading… 的圈圈一直打轉。
那麼有什麼辦法可以減少查詢MySQL的時間?用多進程並行查詢不行,因為PHP-FPM 中不允許用 pcntl_fork 一類的調用。
幸好還有 mysqlnd,mysqlnd提供了類似 stream_select 的機制(見 這篇文章) ,可以做到在單進程中對MySQL並行查詢。這主要運用了mysqli_poll 和 reap_async_query 兩個函數。
還是通過例子來介紹MySQL並行查詢的實施方法。假設要並行地向MySQL發出10個查詢,最基本的代碼應該是這樣的:
1.$links=[];
2.for($i=0;$i!==10;$i++){
3.$links[$i]=newmysqli('127.0.0.1','user','password','db1');
4.$links[$i]->query('SELECTSLEEP(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($readsas$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行,同時發起10個MySQL連接,並發出查詢
注意query() 的第二個參數帶上了 MYSQLI_ASYNC 表示非阻塞查詢
10行,使用mysqli_poll 輪詢10個連接的查詢有無返回
mysqli_poll 的第一個參數$reads是個數組,包含需要輪詢那些連接。mysqli_poll 執行完後,會改寫$reads,改寫後$reads包含的是那些已經有數據返回連接。
mysqli_poll的第四個參數,控制的是輪詢的等待時間,單位是「秒」。如果像本例當中設置為null,那麼mysqli_poll輪詢是阻塞的:只有監聽的連接中,任意一個連接有數據返回了,mysqli_poll才會返回。如果等待時間設置為0,那麼每次執行mysqli_poll會立即返回,外層的while會頻繁循環。
第11~19行,遍歷已經有數據返回的連接
reap_async_query和普通query一樣,返回的是mysqli_result,可以一行行fetch數據
20~21行,對於已經獲得了數據的連接,下次mysqli_poll就不需要再輪詢這個連接了,所以關閉連接,並從$links數組刪除這個連接
當所有的連接都返回了數據,$links數組空了,while循環也就終止了。
使用並行查詢的方式,可以大大縮短處理HTTP請求的時間,假設本例中的10個SQL查詢,每個需要執行1秒。因為是並行,處理所有的查詢,也只需要1秒左右。
㈢ php多表查詢,這個是在一張表裡的查詢可以實現。求多表查詢
用左鏈接或者右鏈接(MYSQL),語法如下
select * from A left join B where someboolean。這樣就會以A表為准獲取數據,如果B木有,查詢就為空,3表查詢只需要再嵌套一個left join就行,還有一種查詢語句是直接取表,語法如下:
select a.vapsec,a.com from A as a,B,C where a.aa=B.aa (and so on)這樣也可以取得查詢,後面跟查的條件即可,還有一種呢是使用子查詢,比如having之類的,having效率較低,不用哈,語法:
select * from A where A.vapsec = (select x? from B ,C where ……)等等,語句很多,找個自己寫著簡單的寫,能看懂的寫,不會的追問,或者網路hi留言:vaps2010。
記得採納,不採納以後不回答你問題了。
㈣ php 的多表查詢 怎麼做
很簡單啊,可以選擇JION關鍵字。
比如<?php
session_start();
include "conn/conn.php";
$s_sqlstr="select * from xs inner jion xs_kc on xs.xh=xs_kc.xh"order by xhDesc";
$s_rst = $conn->execute($s_sqlstr);
?>
這就實現了兩個表的查詢,你也可以加別名,這樣更方便書寫
㈤ PHP 多表聯查
b, c, d 三張表的 name 你給出了a表的四個欄位,第四個欄位是幹嘛的?
userId 不加上了,不知道你這個欄位是幹嘛的。 b, c, d 三張表中的name欄位對應著a表中的wareId, goodsId, wareManager
SELECT
*
FROM
a,b,c,d
WHERE
a.wareId=b.name
AND
a.goodsId=c.name
AND
a.wareManager=d.name;
㈥ thinkphp tp5多表查詢
thinkphp tp5多表查詢
//以blogs為主表
$res = Db::name('blogs')
->alias("a") //取一個別名
//與category表進行關聯,取名i,並且a表的categoryid欄位等於category表的id欄位
->join('category i', 'a.categoryid = i.id')
->join('user u', 'a.authorid = u.id')
//想要的欄位
->field('a.id,a.title,a.content,u.username,a.createtime,i.category,a.look,a.like')
//查詢
->select();
㈦ php+mysql 兩個資料庫中進行多表查詢
select * from databasea.table1 union select * from databaseb.table2 ;
不推薦垮庫使用.弊端太多
㈧ php+mysql 一對多表查詢
$sql
=
"select
gjd_callback.call_fee,
gjd_callback.call_time
from
gjd_callball,gjd_cs
where
gjd_cs.id=gjd_callback.call_id
and
gjd_cs.id=$id"
還可以:
$sql
=
"select
gjd_callback.call_fee,
gjd_callback.call_time
from
gjd_callball
left
join
gjd_cs
on
gjd_cs.id=gjd_callback.call_id
where
gjd_cs.id=$id"
這兩句都可以!
㈨ php多表關聯查詢
在這句代碼
"FROM " . $GLOBALS['ecs']->table('order_goods')." AS og, ".$GLOBALS['ecs']->table('order_info')." AS oi ".
後面加(注意點號的連接):
" LEFT JOIN ". $GLOBALS['ecs']->table('goods') . "AS g ON og.goods_id = g.goods_id ".
然後在開頭的sql語句後面這里加上你要的欄位:
$sql = 'SELECT og.goods_id, og.goods_sn, og.goods_name,og.goods_attr, og.goods_number AS goods_num, og.goods_price, g.gonghuojia '.
最後你去測試看一下行不行.
㈩ php mysql 多表分級查詢
PHP+Mysql多條件多值查詢示例代碼:
index.html代碼:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " <html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>SQL多條件查詢示例</title></head><body><form method="post" action="deal.php"><h1>房屋出租</h1>房屋類型:<select name="type"><option value="1">一居室</option><option value="2">二居室</option><option 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//連接資料庫$conn=mysql_connect("localhost","root",""); //選擇資料庫$db=mysql_select_db("資料庫名"); //接收 參數$type=$_POST['type'];$area=$_POST['area'];$addr=$_POST['addr']; //SQL語句主題$query="select * from room where "; //根據條件和傳的值拼接sql語句//判斷面積不為空if($type!=""){ //然後根據具體面積分情況拼接 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}%'"; //地址} //執行查詢$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 ""; //等等} ?>