1

我有一张名为 quest 的表:

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 页面中,我打印了所有十二个任务并为每个任务分配了一个链接。对于第一个:localhost/quests.php?quest=1 对于第二个:localhost/quests.php?quest=2 等等...

因为在我的 current_quests 表中我有 id 5 我想在 quests.php 和 4,6 斜体中使 Fifth Quest 加粗。

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 斜体

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']);       
    }

对不起,很长的帖子。这是我想要实现的图片。

在此处输入图像描述

谢谢

4

3 回答 3

0

我建议您LEFT JOIN在一个查询中使用从 DB 接收您需要的所有数据。收到的表格数据也将包含呈现所需视图的所有必要数据。

$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>";
}
于 2013-07-29T11:15:07.880 回答
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>";
    }
}
于 2013-07-29T11:13:09.027 回答
0

尝试case $i:代替case TRUE:or case FALSE:

通过在那里进行布尔比较,这是正在评估的。阅读有关如何使用 switch-case 语句的文档可能会有所帮助。你已经给了它你想要在switch()部件中测试的值。每个case都是您想要测试以查看它是否匹配的值/案例,这就是您不想要布尔值的原因。

于 2013-07-29T11:22:00.023 回答