2013-07-24 53 views
0

我有一個簡單的腳本,但它已經有點複雜了,至少對我而言。從MySQL獲取2個項目,使用通過ID的單個查詢

所以在這裏,我需要從表格中請求2個菜單按鈕,其中包含所有這些按鈕。已知它們的ID是由同一頁上的另一個腳本呈現的,並且包含在變量$cat_main_id$cat_add_id中。所以這裏是我的腳本,至少是它的頂部,我的問題是如何通過相同的查詢獲得兩個菜單按鈕,如果這實際上是可能的?

if ($cat_main_id > 0) { 
    $menu_query = 'SELECT * FROM lcategories WHERE ID in (:id , :id2)'; 
    $res = $db->prepare($menu_query); 
    $res->execute(array(':id' => $cat_main_id, ':id2' => $cat_add_id)); 
    foreach ($res as $info); 
} else { 
    echo ''; 
} 
while ($info = $res -> fetch()){ 
    $category_name = str_replace("&", "&", $info['category_name']); 
    $category_page = $info['category_page']; 
    $category_dir = $info['category_folder']; 
    $category_link = DS.$category_dir.DS.$category_page; 
print<<<END 

<div class="post_cat">Posted in category <a href="$category_link" class="cat">$category_name</a> <a href="$category_link" class="cat">$category_name</a></div> 
<div class="clear"></div> 

END; 
} 

回答

1

是很容易,關鍵是當你再拿到結果反饋以確定哪一行是哪個按鈕

if($cat_main_id > 0 && $cat_add_id > 0){ 
    $menu_query = 'SELECT * FROM lcategories WHERE ID in (:id , :id2)'; 
    $res = $db->prepare($menu_query); 
    $res->execute(array(':id' => $cat_main_id, ,':id2' => $cat_add_id)); 
}else{ 
    die(header("Location: error.php")); 
}; 
+0

你是完全正確的,現在我無法確定哪個結果去哪裏。 UPS!!! – AlexB

+0

當你迭代兩行時,只需將ID字段與你的變量cat_main_id進行比較,如果它等於你現在的cat_main,否則它是cat_add –

+0

ps,而我欣賞Ups,投票我的答案是讚賞更多:) –

0
if ($cat_main_id > 0) { 
    $menu_query = 'SELECT * FROM lcategories WHERE ID = :id OR ID = :id2'; 
    $res = $db->prepare($menu_query); 
    $res->execute(array(':id' => $cat_main_id, ':id2' => $cat_add_id)); 
} else { 
    die(header("Location: error.php")); 
} 
+0

'SELECT * FROM lcategories WHERE ID IN(:身份證,爲ID2)' - 我們看到了準備好的語句的一個限制:你不能有無限的參數來輕鬆地將這個查詢擴展爲兩個以上的id。 – Sven

+0

無論如何,我認爲我永遠不會需要超過2個。謝謝。去嘗試,並在2分鐘回來 – AlexB

0

你可以使用IN詢問像這樣:

if ($cat_main_id > 0) 
{ 
    $menu_query = 'SELECT * FROM lcategories WHERE ID IN (:id1, :id2)'; 
    $res = $db->prepare($menu_query); 
    $res->execute(array(':id1' => $cat_main_id, ':id2' => $cat_add_id)); 
} 
else 
{ 
    header("Location: error.php"); 
    die(); 
} 
0

到JimiDini的答案相似,但我更喜歡IN,而不是OR。對於兩個ID來說,這並沒有太大的區別,但是如果它們中有很多,我認爲將它們放在一個列表中會更清楚。

if ($cat_main_id > 0) { 
    $menu_query = 'SELECT * FROM lcategories WHERE ID IN (:id, :id2)'; 
    $res = $db->prepare($menu_query); 
    $res->execute(array(':id' => $cat_main_id, ':id2' => $cat_add_id)); 
} else { 
    die(header("Location: error.php")); 
} 
相關問題