2014-02-05 126 views
1

(是的,在詢問我的問題之前,我已經「徹底搜索了答案」......但還沒有找到對我的問題的「正確」答案。已閱讀關於用戶變量的MySQL人...我已閱讀關於PDO的PHP人...仍然無法理解解決方案。)PHP/PDO/MySQL:將多個查詢轉換爲單個查詢

我試圖從PHP代碼中獲取相同的結果集

SET @x := 0; 

SELECT * 
FROM (

    SELECT 
    `o`.`timestamp` 
    `o`.`v_phase_a` , 
    `o`.`v_phase_b` , 
    `o`.`v_phase_c` , 
    (@x := @x+1) AS x 
    FROM `operational_parameters` AS o 
    WHERE `o`.`timestamp` >= '2014-01-21 05:00:00' 
    AND `o`.`timestamp` <= '2014-02-04 04:59:30' 
    ORDER BY `o`.`timestamp` 

) t 
WHERE x MOD 336 = 0; 

理性:從正確和成功執行中phpMyAdmin的這個SQL語句返回e對於結果集的類型來說是一個漫長的故事,並且根植於我的客戶的業務需求。它應該表示一個統一的採樣數據,這些數據存儲爲在給定的時間間隔內插入30秒的行,在這種情況下爲2周......此特定語句返回剛好120行的數據,然後由PHP打包併發送給UI與jqplot插件...

其他一切工作得很好,除了在PHP內我無法執行多個SQL語句,我認爲將需要設置我的用戶變量@x,用於後續的SELECT語句。同樣,當對使用phpMyAdmin我的數據庫中查詢這個SQL運行得很好......

我不明白,一般來說,在PHP中,一個不能在單個查詢中執行多個SQL語句...

是然而,有可能創建一個SINGLE SQL語句(作爲字符串),它將使用phpMyAdmin工具和上面列出的SQL獲取與MySQL返回的結果集相同的結果集?我可以傳遞給我的PHP中新創建的PDO的單個語句並獲得正確的行數?

(好像PDO的都應該能夠處理這種情況下,至少這就是我從我的這個板子的研究收集...)

我有點新的PHP/MySQL,所以我準備學習。教導!

回答

2

您可以將初始化爲子查詢:

SELECT * 
FROM (SELECT o.timestamp , o.v_phase_a , o.v_phase_b , o.v_phase_c , (@x := @x+1) AS x 
     FROM operational_parameters AS o cross join 
      (select @x := 0) const 
     WHERE o.timestamp >= '2014-01-21 05:00:00' AND o.timestamp <= '2014-02-04 04:59:30' 
     ORDER BY o.timestamp 
    ) t 
WHERE x MOD 336 = 0; 
+0

完美!今天我學到了一些東西。在PHP中實現後,此SQL每次都會返回完美的結果集。很多,非常感謝你,林諾夫先生,並stackoverflow。 Frickin'真棒! – PHPAcolyte