1

我有一个 sql 查询,它从我现在想要在数组中显示的 3 个不同的表中提取所有类型的数据。我可以让它输出来自 sql 查询的所有数据,但我只想根据表中列的值是否相同来一次显示部分数组。下面将尝试演示。

我的 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  |

我希望我的数组在 page1 上输出这个

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

这在第 2 页等等。每个页面将包含所有客户的列表,并且每页只有一个订单值。每个用户的订单列值会有所不同,因为他们可以在订单字段中输入自己的文本。这是可能的,如果是这样,最好的方法是什么?

@Gordon Linoff 这是我当前的查询。我真的不明白你写了什么或更多它与我的查询有何关系。下面是我当前的查询。我没有完成输出到数组中。我只是在测试时拥有这个,直到得到我想要的结果。

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

这是我的新查询。第一部分工作得很好,但子查询给我带来了问题。它没有拉任何结果。@戈登林诺夫

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); 
}
4

2 回答 2

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

或者如果我没记错的话最简单的

SELECT *
FROM   myTable
WHERE  `Order` = '1B'
于 2012-08-07T23:53:53.177 回答
1

我认为您可以通过在查询中添加页码来解决您的问题。不幸的是,这在 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
于 2012-08-08T02:01:50.743 回答