2012-08-07 85 views
0

我有一個sql查詢,它從3個不同的表中抽取所有類型的數據,我現在想在數組中顯示這些數據。我可以從sql查詢中輸出所有數據,但我只想根據表中列的值是否相同來一次顯示數組的一部分。下面將嘗試演示。顯示來自mysql查詢的部分結果

我的SQL結果看起來是這樣的:

Client | Order | Exc1 | Exc2 | Rest | Reps | 
------------------------------------------------------- 
Steve | 1A  | this | That | This | that | 
------------------------------------------------------- 
Mike | 1A  | this | That | This | that | 
------------------------------------------------------- 
Jax  | 1A  | this | That | This | that | 
------------------------------------------------------- 
Steve | 1B  | this | That | This | that | 
------------------------------------------------------- 
Mike | 1B  | this | That | This | that | 
------------------------------------------------------- 
Jax  | 1B  | this | That | This | that | 

我希望我的陣列來輸出這在第1頁

Steve | 1A  | this | That | This | that | 
------------------------------------------------------- 
Mike | 1A  | this | That | This | that | 
------------------------------------------------------- 
Jax  | 1A  | this | That | This | that | 

這2頁等上。每個頁面將包含所有客戶的列表,每個頁面只有一個訂單值。每個用戶的訂單欄值會有所不同,因爲他們可以爲訂單字段輸入自己的文本。這是可能的,如果是這樣,最好的方式是怎樣的?

@Gordon Linoff這裏是我目前的查詢。我真的不明白你寫了什麼或更多的與我的查詢有關。在我目前的查詢ID下面。我沒有完成輸出到數組中。我在測試之前就擁有了這個功能,直到我獲得了我想要的結果。

function get_workout_class(){ 
$workout_class = array(); 

$workout_query = mysql_query(" 
SELECT * 
FROM `movements` 
LEFT JOIN `classes` 
ON `movements`.`class_id` = `classes`.`class_id` 
LEFT JOIN `clients` 
ON `movements`.`class_id` = `clients`.`class_id` 
WHERE `classes`.`class_id` = '$class_id' AND `user_id` = ".$_session['user_id']." 
ORDER BY `movements`.`order`, `clients`.`first_name` 

"); 

}

這裏是我的查詢結果的屏幕截圖,所以你可以看到我是多麼希望他們分組。頁面按不同的「順序」值拆分。客戶數量因班級而異。

http://custommovement.com/help/query.png

這是我的新的查詢。第一部分工作正常,但子查詢給我的問題。它不拉任何結果。 @GordonLinoff

function get_workout_class($class_id){ 
$class_id = (int)$class_id; 

$workout_class = array(); 

$workout_query = mysql_query(" 
WITH `workouts` as (
SELECT 
`movements`.`movement_id`, 
`movements`.`order`, 
`movements`.`mv_00`, 
`movements`.`mv_01`, 
`movements`.`mv_02`, 
`movements`.`mv_03`, 
`movements`.`mv_04`, 
`movements`.`rep_set_sec`, 
`movements`.`rest`, 
`classes`.`class_name`, 
`clients`.`client_id`, 
`clients`.`first_name`, 
`clients`.`last_name`, 
`clients`.`nickname` 
FROM `movements` 
LEFT JOIN `classes` ON `movements`.`class_id` = `classes`.`class_id` 
LEFT JOIN `clients` ON `movements`.`class_id` = `clients`.`class_id` 
WHERE `classes`.`class_id` = '$class_id' 
) 

SELECT `wo`.* 
(SELECT COUNT(DISTINCT `order`) FROM `workouts` `wo2` WHERE `wo2`.`order` <= `wo`.`order`) as `pagenum` 
FROM `workouts` `wo` 
ORDER BY `pagenum` 

"); 

echo mysql_num_rows($workout_query); 
} 
+0

您能告訴我們一些代碼嗎? – jprofitt 2012-08-07 23:51:39

+1

'WHERE ORDER ='1B''? – 2012-08-07 23:53:29

+0

在網站上搜索「分頁」 – 2012-08-07 23:54:03

回答

0

我想你可以通過添加頁碼查詢解決您的問題。不幸的是,這在mysql中是非常痛苦的,因爲你必須使用自加入或相關的子查詢。

下面是如何與相關子查詢做到這一點的例子:

select t.*, 
     (select count(distinct order) from t t2 where t2.order <= t.order) as pagenum 
from t 
order by pagenum 

根據您的原始查詢(但不把它變成一個字符串):

with workouts as (
    SELECT * 
    FROM `movements` LEFT JOIN 
      `classes` 
      ON `movements`.`class_id` = `classes`.`class_id` LEFT JOIN 
      `clients` 
      ON `movements`.`class_id` = `clients`.`class_id` 
     WHERE `classes`.`class_id` = '$class_id' AND `user_id` = ".$_session['user_id']." 
    ) 
select wo.*, 
     (select count(distinct order) from workouts wo2 where wo2.order <= wo.order) as pagenum 
from workouts wo 
order by pagenum 

這幾乎工作。 。 。只是一個警告。您可以將「SELECT *」放入with子句中,因爲您有多個具有相同名稱的列。放入你需要的列。

我忘記了mysql不支持「with」語句。我對不好的語法表示歉意。解決辦法之一是使用視圖或臨時表。否則,查詢有點複雜,因爲邏輯必須重複兩次:

select wo.*, 
     (select count(distinct order) 
     from (SELECT * 
       FROM `movements` LEFT JOIN 
        `classes` 
        ON `movements`.`class_id` = `classes`.`class_id` LEFT JOIN 
        `clients` 
        ON `movements`.`class_id` = `clients`.`class_id` 
       WHERE `classes`.`class_id` = '$class_id' AND `user_id` = ".$_session['user_id']." 
      ) wo2 
     where wo2.order <= wo.order 
     ) as pagenum 
from (SELECT * 
     FROM `movements` LEFT JOIN 
      `classes` 
      ON `movements`.`class_id` = `classes`.`class_id` LEFT JOIN 
      `clients` 
      ON `movements`.`class_id` = `clients`.`class_id` 
     WHERE `classes`.`class_id` = '$class_id' AND `user_id` = ".$_session['user_id']." 
    ) wo 
order by pagenum 
+0

我發佈了上面的查詢以及查詢結果屏幕快照的鏈接,因爲我無法弄清楚您的查詢將如何轉換爲我當前的查詢。 – Colbyd 2012-08-08 12:49:10

+0

我的理解是,你想用網頁把事情分開。所以,這個查詢在返回集中添加了一個「pagenum」列。然後你可以選擇你想要的任何數據頁面。爲了使這個工作適合你的查詢,只需在這之前添加「with t as()」。 – 2012-08-08 13:07:48

+0

那麼你上面寫的是否會遵循我最初發布的現有查詢? – Colbyd 2012-08-08 13:45:24

1

試試這個。它使用子查詢作爲訂單的最大值。

SELECT a.* 
FROM myTable a INNER JOIN 
      (
       SELECT Client, 
         Max(`Order`) as MaxOrder 
       FROM myTable 
       GROUP BY Client 
      ) c 
       ON a.Client = c.Client AND 
        a.`Order` = c.MaxOrder 

或simpliest如果我沒有記錯

SELECT * 
FROM myTable 
WHERE `Order` = '1B' 
+0

我可以從表格中獲得確切的值,但我希望所有結果都返回到客戶端在類中並顯示與該類關聯的所有數據。我只想一次顯示一個訂單值。我認爲分頁可能是我的答案,但還不確定。 – Colbyd 2012-08-08 00:01:20

+0

哦,是的,所以你想部分顯示結果。去'分頁:) :) – 2012-08-08 00:02:33

+0

分頁我不工作的一件事。當我的查詢返回時,顯示我所有數據所需的頁數將因不同的「訂單」值的數量而異。例如,在班級I中可能有1A,1B,1C,1D(4頁),另一班可能是1A,1B,1C,1D,1E(5頁)。分頁仍然有可能嗎? – Colbyd 2012-08-08 01:46:51