我有一张名为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页面中,我打印了所有12个任务并分配了每个任务的链接。 对于第一个: 本地主机/ quests.php?寻求= 1 对于第二个: 本地主机/ quests.php?寻求= 2 等...
因为在我的current_quests表中我有id 5,我想在quests.php和4,6 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
我想做什么,我不知道当我在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']);
}
对不起,很长的帖子。 这是我想要实现的目标的图片。
由于
答案 0 :(得分: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>";
}
}
答案 1 :(得分: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>";
}
答案 2 :(得分:0)
尝试使用case $i:
代替case TRUE:
或case FALSE:
。
通过在那里进行布尔比较,正在评估。关于如何使用switch-case语句的Reading the documentation可能有所帮助。您已经在switch()
部分中为其提供了要测试的值。每个case
都是您要测试的值/大小写,以查看它是否匹配,这就是您不需要布尔值的原因。