2013-07-29 35 views
1

我有一個表叫做任務:PHP裏面的樹

id name 
1 First Quest 
2 Second Quest 
3 Third Quest 
4 Fourth Quest 
5 Fifth Quest 
6 Sixth Quest 
7 Seventh Quest 
8 Eighth Quest 
9 Ninth Quest 
10 Tenth Quest 
11 Eleventh Quest 
12 Twelfth Quest 

和一張桌子叫current_quests:

id user 
5 motoc 

在我quests.php頁打印我所有十二個任務,並分配一個鏈接到每。 對於第一個: 本地主機/ quests.php追求= 1 對於第二個: 本地主機/ quests.php尋求= 2 等等

因爲在我current_quests表我有ID 5我想在quests.php和4,6斜體中創造第五任務。

First Quest 
Second Quest 
Third Quest 
*Fourth Quest* 
**Fifth Quest** 
*Sixth Quest* 
Seventh Quest 
Eighth Quest 
Ninth Quest 
Tenth Quest 
Eleventh Quest 
Twelfth Quest 

我想做的事情,我不知道怎麼回事,當我插入current_quest另一個ID可以說,ID = 6

id user 
5 motoc 
6 motoc 

我想第五和第六,以成爲大膽和4 7 italic

First Quest 
Second Quest 
Third Quest 
*Fourth Quest* 
**Fifth Quest** 
**Sixth Quest** 
*Seventh Quest* 
Eighth Quest 
Ninth Quest 
Tenth Quest 
Eleventh Quest 
Twelfth Quest 

這是我嘗試過的,但我確定那是不好的。

function SelectQuest($i){ 
     $sth = $this->dbh->prepare("SELECT * FROM quests"); 
     $sth->execute(); 
     while($row = $sth->fetch(PDO::FETCH_ASSOC)){ 


switch ($row['id']) { 
case $row['id'] == $i: 
    print "<a href='quests.php?quest=$row[id]'><b>$row[name]</b><br><br></a>"; 
    break 1; 
case $row['id'] == $i-1: 
    print "<a href='quests.php?quest=$row[id]'><i>$row[name]</i><br><br></a>"; 
    break 1; 
case $row['id'] == $i+1: 
    print "<a href='quests.php?quest=$row[id]'><i>$row[name]</i><br><br></a>"; 
    break 1; 
default: 
    print "<a href='quests.php?quest=$row[id]'>$row[name]<br><br></a>"; 
} 

} 

$sth = $dbh->prepare("SELECT * FROM current_quest");    
    $sth->execute(); 
    $row = $sth->fetch(PDO::FETCH_ASSOC); 

    if (isset($_GET['quest'])) { 
     $item = $_GET['quest']; 
    print "string"; 

    }elseif(isset($row['id'])){ 

    $quest = new Quests($dbh); 
    $quest->SelectQuest($row['id']);  
    } 

對不起,很長的文章。 這是我想要存檔的圖片。

enter image description here

感謝

+1

嘗試'case $ i:'而不是'case TRUE:'或'case FALSE:'。通過在那裏進行布爾比較,正在評估。 [閱讀文檔](http://php.net/manual/en/control-structures.switch.php)瞭解如何使用switch-case語句。此外,你有很多*「我想要」*,但沒有任何「這就是發生了什麼」和「這是我排除故障」,所以我不知道是否還有其他問題。 – BLaZuRE

回答

0

第一獲取current_quest表數據。解析接收到的數據,並創建一個類似於此數組(創建該條目的每一行):

$isCurrentQuest[$YourQuestID] = true 

獲取quest表數據和分析它是這樣的:

if(!isset($isCurrentQuest[$QuestID] && (isset($isCurrentQuest[$QuestID - 1]) || isset($isCurrentQuest[$QuestID + 1]) 
{ 
    // Italic 
} 
else if(isset($isCurrentQuest[$QuestID]) 
{ 
    // Bold 
} 
else 
{ 
    // Normal 
} 

(此代碼正常工作只有在有是任務之間沒有空ID)

所以,你的代碼是:

$sth = $dbh->prepare("SELECT * FROM current_quest");    
$sth->execute(); 
while($row = $sth->fetch(PDO::FETCH_ASSOC)) 
{ 
    $isCurrentQuest[$row['id']] = true 
} 

$sth = $dbh->prepare("SELECT * FROM quests"); 
$sth->execute(); 
while($row = $sth->fetch(PDO::FETCH_ASSOC)) 
{ 
    if(!isset($isCurrentQuest[$QuestID] && (isset($isCurrentQuest[$QuestID - 1]) || isset($isCurrentQuest[$QuestID + 1]) 
    { 
     print "<a href='quests.php?quest=$row[id]'><i>$row[name]</i><br><br></a>"; 
    } 
    else if(isset($isCurrentQuest[$QuestID]) 
    { 
     print "<a href='quests.php?quest=$row[id]'><b>$row[name]</b><br><br></a>"; 
    } 
    else 
    { 
     print "<a href='quests.php?quest=$row[id]'>$row[name]<br><br></a>"; 
    } 
} 
+0

爲什麼這樣做而不是修復switch-case語句? – BLaZuRE

+0

因爲這樣更簡單更漂亮 – mdziekon

0

我建議您使用LEFT JOIN在單個查詢中接收來自數據庫的所有數據。另外接收到的表格數據將包含呈現所需視圖的所有必要數據。

$quests = array(); 

// performing single database query 
$sth = $this->dbh->prepare("SELECT * FROM quests 
     LEFT JOIN current_quests ON current_quests.id = quest.id"); 
$sth->execute(); 
while($row = $sth->fetch(PDO::FETCH_ASSOC)) 
    $quests[] = $row; 

foreach($quests as $key => $quest) 
{ 
    // use $quest['user'] or other current_quest field to find if quest is active 
    if($quest['user']) 
    echo "<a href='quests.php?quest=".$quest['id']."><b>$row['name']</b></a>"; 
    // mark neighbour item 
    elseif((($key+1) < count($quests)) && $quest['user']) 
    echo "<a href='quests.php?quest=".$quest['id']."><i>$row['name']</i></a>"; 
    // render ordinary item 
    else 
    echo "<a href='quests.php?quest=".$quest['id'].">$row[name]</a>"; 
} 
0

嘗試case $i:而不是case TRUE:case FALSE:

通過在那裏進行布爾比較,正在評估。關於如何使用switch-case語句的Reading the documentation可能會有所幫助。您已經在switch()部分給出了您想要測試的值。每個case是一個你想測試的值,以查看它是否匹配,這就是爲什麼你不需要布爾值。