在我的PHP文件中,我正在使用如下查询读取大量信息:
SELECT GROUP_CONCAT(CONCAT('<comment><body><![CDATA[',body,']]></body>','<replier>',if(screen_name is not null and !anonymous,screen_name,''),'</replier>','<created>',created,'</created></comment>') SEPARATOR '')
FROM idiscussion
LEFT JOIN
users
ON idiscussion.uid=users.id
WHERE idiscussion.iask_id = 1
是的,它就像xml格式,但似乎用PHP解析起来并不容易,
是否建议使用哪种格式以便以后轻松解析?
AS我需要将它们连接在一起,
您可以考虑这种情况:一次检索本主题下的1个主题和讨论。 1个主题对应多个讨论。如何在不将它连接在一起的情况下在1个查询中完成?
答案 0 :(得分:2)
如果您从SQL数据库获取数据,那么不使用SQL将其破解为某种文本格式会更容易,而是执行常规查询并使用SQL函数来处理您的结果给出。
如果您最终需要将数据序列化到其他PHP客户端,我建议PHP's standard serialization format。
答案 1 :(得分:0)
取决于数据结构,但是可以使用join()轻松地将值列表保存为以分号分隔的条目列表,然后使用split()轻松解析。
这非常简单,但对于稍微复杂的数据可能并不理想。
回答评论:如果数据包含分号,则需要根据需要进行转义。
答案 2 :(得分:0)
答案 3 :(得分:0)
我可以问为什么你不只是在没有连接数据的情况下检索数据?
SELECT body,
IF(screen_name IS NOT NULL AND !anonymous, screen_name, '') AS replier,
created
FROM idiscussion
LEFT JOIN
users
ON idiscussion.uid = users.id
WHERE idiscussion.iask_id = 1
这应该像原始查询一样快速执行,并且您可以像访问任何其他结果集一样访问其数据。假设您正在使用MySQL而不使用PDO:
$result = mysql_query($sql);
if ($result) {
while ($row = mysql_fetch_assoc($result)) {
// $row is an associative array containing the current row's data.
}
}
如果您需要创建XML但又想要以原始形式访问数据,只需在PHP中创建它。
$xml =
'<comment>' .
'<body><![CDATA[' . $row['body'] . ']]></body>' .
'<replier>' . $row['replier'] . '</replier>' .
'<created>' . $row['created'] . '</created>' .
'</comment>';
如果数据尚未清理,您可能需要转义数据。您也可以使用XMLWriter等XML构建器,但这超出了本问题的范围。