2009-05-27 89 views
0

在我的PHP文件中,我讀出批量的信息使用查詢象下面這樣:什麼是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解析,

任何建議爲了稍後解析,使用哪種格式?

至於我,我需要它們串聯一起,

你可以考慮一下這種情況:要檢索同時此主題下1話題和討論。 1個主題對應多個討論。如何在1個查詢中完成而不將它們連接在一起?

回答

0

取決於數據結構,但可以使用join()方便地將值列表保存爲以分號分隔的條目列表,然後使用split()輕鬆進行分析。

這非常簡單,但對於稍微複雜的數據可能並不理想。

回答評論:如果數據包含分號,則需要根據需要進行轉義。

+0

如果數據包含分號怎麼辦? – elcuco 2009-05-27 20:47:07

+0

是的,我認爲你的方法很好,但似乎分隔符是一個關鍵點。 – omg 2009-05-27 20:57:30

0

您可以使用DOMSimpleXML解析XML文件,但也可以使用JSONYAML。所有這些都很容易使用,因爲您可以依賴PHP的高級解析器。取決於你想如何使用格式,它們有優點和缺點。

+0

所以你提示xml是在PHP中解析的最簡單的格式? – omg 2009-05-27 20:55:58

2

如果您從SQL數據庫獲取數據,不使用SQL將其翻譯爲某種文本格式會更容易,而是執行常規查詢並使用SQL函數處理結果,重新給予。

如果您最終需要將數據序列化到其他PHP客戶端,我會推薦PHP's standard serialization format

+0

我把它翻譯成一些文本格式來獲得1個查詢中的所有信息,你是對的,但如果不是這樣的話,需要多次查詢,至少往返時間浪費了。 – omg 2009-05-27 21:39:01

+1

如果這個單個查詢能夠檢索所有數據來構建字符串......是什麼讓您認爲它不能將相同的數據傳回給php?假設你不能寫一個簡單的JOIN來在一個查詢中獲取所有的數據,還有其他的選擇比創建(和後來的解析)一個XML字符串更好。你可以創建一個存儲過程,一個視圖或者建立一個臨時表。 – 2009-05-27 23:08:53

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>'; 

如果數據尚未被清理,您可能需要轉義數據。您也可以使用XML生成器,如XMLWriter,但這超出了這個問題的範圍。

+0

您可以考慮這種情況: 一次檢索1個主題和討論。 1個主題對應多個討論。如何在1個查詢中完成而不將它連接在一起? – omg 2009-05-28 00:07:52

+0

多行,也許?形式爲:topic_id,discussion_id,discussion_name,discussion_body,discussion_replier,discussion_created。主題ID在所有行中始終保持一致,但其餘的不會。 – 2009-05-28 10:42:12

相關問題