2013-03-23 81 views
-2

我正在運行一個SQL查詢,它使用內部連接從兩個表中拉出id,catid,name,subof。通過mysql_query循環並替換值或1查詢做工作

select shop.id, shop.catid, shop.name, shop_cat.catname, shop_cat.subof from shop inner join shop_cat on shop.catid = shop_cat.id where shop.active='1' order by shop_cat.catname, shop.name 

現在,這個結果我需要的一切,但我通過結果需要循環,並做了subof值另一個SQL查詢(這是一個值,該值作爲shop_cat的ID號)。我需要拉取subof值#的catname,然後將結果/數組字段subof更新爲cat的名稱。

所以,如果原來的查詢給我的值爲15的subof,它會從shop.cat做一個select catname,其中id = '15'我會從該查詢中取出catname,然後更新subof = catname for each在具有subof值的原始結果中的值。

編輯3/23/13 12:30 pm MST:使用更多的Opeyemi寫的代碼,來解釋更多我需要的東西。我不知道如何解釋它...

$q = "select shop.id, shop.catid, shop.name, shop_cat.catname, shop_cat.subof from shop inner join shop_cat on shop.catid = shop_cat.id where shop.active='1' order by shop_cat.catname, shop.name"; 
$r = mysql_query(); 
while(list($shopid, $catid, $name, $catname, $subof) = mysql_fetch_array($r)) { 
    $getname = mysql_query("select catname from shop_cat where id='$subof'"); 
    $rowname = mysql_fetch_assoc($getname); 
    //code to update array to change value of $subof to new $rowname['catname'] 
} 

數據庫查詢運行,得到我我的價值觀。

然後,我需要運行某種循環,它將遍歷從查詢中獲得的每個PHP結果。此循環將採用subof值(它是一個整數ID號),然後運行查詢以獲取該整數值的值catname。然後循環將更新當前結果,並將整數的subof值更改爲循環中從DB中拉出的catname。

我不需要隨時更新數據庫,我需要從第一個查詢更新結果/數組。

+0

約翰,你沒有很清楚地解釋你的問題。您發佈的查詢爲所有shop_id提供* subof *和* catname *的值。你想下一步該做什麼 ? – grahamj42 2013-03-23 08:15:04

+0

是的。對不起,如果我不清楚。我想採取查詢,然後使用php循環查詢結果。對於每個結果行,抓取subof值。然後執行選擇MySQL查詢以從數據庫中獲取subof值的名稱。然後更新我正在循環的數組,以更新剛剛用名稱讀取的子文件(替換id值),或者在我們剛剛打開的數組的那一行中創建一個新條目,並將MySQL查詢中的值設置爲循環。 – John 2013-03-23 09:04:59

+0

我更新了我的帖子,試圖更加明確我需要做什麼。 – John 2013-03-23 18:28:45

回答

1

你需要做的是將結果集存儲在數組中並替換數組中。

$q = "select shop.id, shop.catid, shop.name, shop_cat.catname, shop_cat.subof from shop inner join shop_cat on shop.catid = shop_cat.id where shop.active='1' order by shop_cat.catname, shop.name"; 
$r = mysql_query(); 
$dataset = array(); 
// Store result in an array 
while($assoc = mysql_fetch_assoc($r)) { 
    $dataset[] = $assoc; 
} 
// Update array 
foreach($dataset as $data) { 
    $getname = mysql_query("select catname from shop_cat where id='{$data['subof']}'"); 
    $rowname = mysql_fetch_assoc($getname); 
    // replace data 
    replace_dataset($data['subof'], $rowname); 
} 

function replace_dataset($key, $newname) { 
    global $dataset; 
    foreach($dataset as $k => $data) { 
    if ($data['id'] == $key) 
     $dataset[$k]['subof'] = $newname; 
    } 
} 
+0

謝謝Opeyemi的一些修改。 – John 2013-03-26 23:03:16

0

你問在PHP中如何做到這一點或什麼?如果您mysql_fetch_array()或mysql_fetch_row()能夠尋找它是循環如何導致PHP,因爲這

$q = "select shop.id, shop.catid, shop.name, shop_cat.catname, shop_cat.subof from shop inner join shop_cat on shop.catid = shop_cat.id where shop.active='1' order by shop_cat.catname, shop.name"; 
$r = mysql_query(); 
while(list($shopid, $catid, $name, $catname, $subof) = mysql_fetch_array($r)) { 
    // the values from the query are assigned to the variables 
    // $shopid, $catid, $name, $catname, $subof in that order already 
    mysql_query("update shop_cat set subof=catname where id='$subof'"); 
    // My interpretation of your query can be wrong though 
    // But you should get the idea 
} 
+0

是的,在PHP中。但我不想更新shop_cat數據庫本身。 $ r的mysql_query中的查詢數組。它將有一個ID爲ID的字段。我需要循環訪問數組,並在每個循環中取出subof值,查詢id = subofvalue的select catname,獲取該catname,然後更新原始數組(不是數據庫)。數據庫不應該在此過程中更新,只是第一次數據庫查詢的原始數組結果。 – John 2013-03-23 08:30:08

+0

Opeyemi,有沒有辦法修改這個來做我所需要的(檢查我上面編輯的帖子) – John 2013-03-23 18:29:10

0

您可以使用mysql_fetch_assoc一樣簡單()或函數來獲取行,可以把你的循環概念它。

之後,您可以使用mysql_fetch_field()從中獲取字段subof和id。

和更新後

您可以查看以下鏈接

http://www.php.net/manual/en/function.mysql-fetch-array.php

http://www.php.net/manual/en/function.mysql-fetch-assoc.php

http://www.php.net/manual/en/function.mysql-fetch-field.php

我希望你得到一些想法數據庫。

+0

請**不要**推薦'mysql_ *'函數。他們已被棄用,並將在更高版本的PHP – Bojangles 2013-03-23 10:02:35

+0

中刪除。感謝您的信息。自從我上次使用php以來已經過去了一年。不與它聯繫。不管怎麼說謝謝@Bojangles – gusainhimanshu 2013-03-23 11:00:26

+0

嗨Bojangles,你能詳細解釋一下這不是推薦的mysql_query函數嗎?應該如何處理? – John 2013-03-23 18:29:37