2013-02-17 76 views
1

我想使用mySQLi從mySQL數據庫中查詢多個(共6個,ID爲1到6)ID的內容。之後,我想把結果(「introtext」)放在不同的DIV中。在我使用下面的代碼的那一刻(完美的作品):mySQLi查詢將結果放入數組和不同的DIV

<?php 
$q = $db->query("SELECT introtext FROM content WHERE id=1"); 
$r = $q->fetch_object(); 
?> 
<div id="content1" class="toggle"><?php echo "$r->introtext";?></div> 

<?php 
$q = $db->query("SELECT introtext FROM content WHERE id=2"); 
$r = $q->fetch_object(); 
?> 
<div id="content2" class="toggle"><?php echo "$r->introtext";?></div> 

<?php 
$q = $db->query("SELECT introtext FROM content WHERE id=3"); 
$r = $q->fetch_object(); 
?> 
<div id="content3" class="toggle"><?php echo "$r->introtext";?></div> 

等等......

如何優化這個代碼查詢MySQL只一次(結果放陣列)和分配不同的結果導入不同的DIV?

乾杯 碎紙機

+0

您是否想要獲取ID爲1至6(僅)的記錄? – Vimalnath 2013-02-17 09:20:32

回答

0

問得好
基本上你將需要2個循環
一個數據,讓您的數組:

<?php 
$data = array(); 
$res = $db->query("SELECT id, introtext FROM content ORDER BY id LIMIT 6"); 
while($row = $res->fetch_assoc()) { 
    $data[$row['id']] = $row['introtext']; 
} 
?> 

你可以使用任何SQL過濾掉查詢。 ORDER BY id LIMIT 6對於目前的情況來說似乎是最方便的「獲得前6個ID」,因爲連續性從未得到保證。

然後另一個循環顯示

<? foreach ($data as $id => $introtext): ?> 
<div id="content<?=$id?>" class="toggle"><?=htmlspecialchars($introtext?)></div> 
<? endforeach ?> 

順便說一句,如果使用不生mysqli的API,但一些輔助庫PHP的一部分將減少到一個行:

<?php 
$data = $db->getIndCol("id","SELECT id, introtext FROM content ORDER BY id LIMIT 6"); 
?> 
+1

獲得第6個ID? OP在哪裏提到過? – Vimalnath 2013-02-17 09:19:42

+0

該方法效果很好。謝謝! – Shredder 2013-02-17 11:21:24

-1

何不你使用IN mysql運算符嗎?

SELECT introtext FROM content WHERE id IN (1,2,3,4,5,6); 

然後在對象/數組中獲取結果。

+0

,因爲可能有其他ID? – 2013-02-17 09:09:56

+1

@YourCommonSense OP已經提到了'ID 1到6',如果我錯了,請和我糾正,它很好地知道爲什麼downvote? – Vimalnath 2013-02-17 09:11:40

-1

如果該項目不是很大,我可以建議嘗試RedBean ORM解決方案。看看它是如何工作去here 是非常簡單的,它只需要在您的項目中包括rb.php文件!

順便說一句,如果你仍然想手動使用mysqli,解決方法是在你的查詢中用id> = 1和id < = 6創建一個新的WHERE,然後使用php參考將結果提取到一個數組。 .. mysqli quickstart guide