有人可以帮助我吗?我正在尝试创建一个 xml 列表,其中包含按日期排序的所有事件。我使用 php 脚本来完成此操作。现在我有这个:
$sql = "SELECT DATE_FORMAT(K.kalender_datum,'%W %d %M %Y') as afhaaldag, A.afval_naam
FROM tblkalender K
INNER JOIN tblafval A
ON A.pk_afval_Id = K.fk_afval_Id
WHERE kalender_datum > CURDATE()
ORDER BY K.kalender_datum";
$query = mysql_query($sql);
$last_date = "";
$tag_open = false;
$xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
$xml .= "<kalender>\n";
for($i = 0; $i<mysql_num_rows($query); $i++)
{
$itemrow = mysql_fetch_assoc($query);
if($last_date != $itemrow['kalender_datum'])
{
//als de laatste datum die gebruikt is niet gelijk is aan de datum die hij binnen krijgt, moet hij een nieuwe afhaaldag beginnen
if($tag_open)
{
$xml .= "\t</afhaaldag>\n";
$tag_open = false;
}
$xml .= "\t<afhaaldag>\n";
$xml .= "\t<datum>" . $itemrow['kalender_datum'] . "</datum>\n";
$xml .= "\t<afval>" . $itemrow['afval_naam'] . "</afval>\n";
$last_date = $itemrow['kalender_datum'];
}
else
{
$xml .= "\t<afval>" . $itemrow['afval_naam'] . "</afval>\n";
$last_date = $itemrow['kalender_datum'];
$tag_open = true;
}
}
$xml .= "</kalender>";
echo $xml;
这给了我这个 xml 输出:
<kalender>
<afval>Grofvuil</afval>
<afval>Restafval</afval>
<afval>GFT</afval>
<afval>PMD</afval>
<afval>Snoeiresten</afval>
<afval>GFT</afval>
<afval>Restafval</afval>
<afval>GFT</afval>
<afval>PMD</afval>
<afval>GFT</afval>
<afval>Snoeiresten</afval>
<afval>Papier en karton</afval>
<afval>Grofvuil</afval>
<afval>Restafval</afval>
<afval>GFT</afval>
<afval>PMD</afval>
</kalender>
但是我需要的是这个:
<kalender>
<afhaaldag>
<datum>2012-01-02</datum>
<afval>GFT</afval>
<afval>Restafval</afval>
<afval>PMD</afval>
</afhaaldag>
<afhaaldag>
<datum>2012-01-17</datum>
<afval>Papier en karton</afval>
</afhaaldag>
<afhaaldag>
<datum>2012-01-23</datum>
<afval>GFT</afval>
</afhaaldag>
</kalender>
有人知道我该怎么做吗?我知道我需要某种循环(我猜是 for 循环)。有人可以帮我解决这个问题吗?
最佳答案
我这里使用的是python,但是你可以按照代码进行操作,没有问题:
kalender = [
('2012-01-02', 'GFT'),
('2012-01-02', 'Restafval'),
('2012-01-02', 'PMD'),
('2012-01-17', 'Papier en karton'),
('2012-01-23', 'GFT')
]
last_date = ""
tag_open = False
xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
xml += "<kalender>\n"
for i in kalender:
# i[0] == datum
# i[1] == afval
# i == $itemrow in your code
datum = i[0]
afval = i[1]
if last_date != datum:
if tag_open:
xml += "\t</afhaaldag>\n"
tag_open = False
xml += "\t<afhaaldag>\n"
xml += "\t<datum>" + datum + "</datum>\n"
xml += "\t<afval>" + afval + "</afval>\n"
last_date = datum
tag_open = True
else:
xml += "\t<afval>" + afval + "</afval>\n"
last_date = datum
tag_open = True
xml += "\t</afhaaldag>\n"
xml += "</kalender>"
print xml
这是输出:
<?xml version="1.0" encoding="UTF-8"?>
<kalender>
<afhaaldag>
<datum>2012-01-02</datum>
<afval>GFT</afval>
<afval>Restafval</afval>
<afval>PMD</afval>
</afhaaldag>
<afhaaldag>
<datum>2012-01-17</datum>
<afval>Papier en karton</afval>
</afhaaldag>
<afhaaldag>
<datum>2012-01-23</datum>
<afval>GFT</afval>
</afhaaldag>
</kalender>
[完成]
输出正是您正在寻找的,是吗?尝试再次检查,因为在您的新输出中,数据标记不存在,所以这很奇怪。
注意我添加了两行:
tag_open = True ##(in the True part of the If Statement)
xml += "\t</afhaaldag>\n" ###Before ending the kalender tag.
and删除else子句中的if语句。
代码:http://dl.dropbox.com/u/3389104/kal.py
--------编辑结束
我的评论(在代码中):
$last_date = "";
$tag_open = false;
for($i = 0; $i<mysql_num_rows($query); $i++)
{
$itemrow = mysql_fetch_assoc($query);
if ($last_date != $itemrow['kalender_datum'])
{
//New Entry
if (tag_open)
{
$xml .= "\t</afhaaldag>\n";
tag_open = false;
}
$xml .= "\t<afhaaldag>\n";
$xml .= "\t<datum>" . $itemrow['kalender_datum'] . "</datum>\n";
$xml .= "\t<afval>" . $itemrow['afval_naam'] . "</afval>\n";
$xml .= "\t</afhaaldag>\n";
$last_date = $itemrow['kalender_datum']
}
else
{
if not (tag_open)
{
$xml .= "\t<afhaaldag>\n";
tag_open = true;
}
$xml .= "\t<afval>" . $itemrow['afval_naam'] . "</afval>\n";
}
}
请原谅一些拼写错误,我现在没有安装 php 的电脑。这段代码是我的总体想法,我不知道它是否有效。
关于php - 无法弄清楚sql语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8979511/