Php 显示mysql查询的部分结果
我有一个sql查询,它从3个不同的表中提取所有类型的数据,我现在想在一个数组中显示这些数据。我可以让它输出sql查询中的所有数据,但我只想根据表中列的值是否相同一次显示数组的一部分。我们将尝试在下面演示 我的sql结果如下所示:Php 显示mysql查询的部分结果,php,mysql,arrays,Php,Mysql,Arrays,我有一个sql查询,它从3个不同的表中提取所有类型的数据,我现在想在一个数组中显示这些数据。我可以让它输出sql查询中的所有数据,但我只想根据表中列的值是否相同一次显示数组的一部分。我们将尝试在下面演示 我的sql结果如下所示: Client | Order | Exc1 | Exc2 | Rest | Reps | ------------------------------------------------------- Steve | 1A | thi
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这是我当前的问题。我真的不明白你写了什么,也不知道它与我的问题有什么关系。下面是我当前的查询。我并没有完成对数组的输出。我只是在测试的时候有这个,直到我得到我想要的结果
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`
");
}
这是我的查询结果的屏幕截图,您可以看到我希望它们如何分组。要按不同顺序值拆分的页面。客户机的数量因班级而异
这是我的新问题。第一部分工作得很好,但子查询给出了我的问题。这不会带来任何结果@戈登林诺夫
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);
}
试试这个。它使用子查询获取订单的最大值
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'
我认为您可以通过在查询中添加页码来解决问题。不幸的是,这在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
在站点中搜索Pagination我可以从表中获得准确的值,但我希望所有结果都返回到类中客户端所在的位置,并显示与该类关联的所有数据。我一次只想显示一个订单值。我认为分页可能是我的答案,但还不确定。哦,是的,所以您希望部分显示结果。进行分页:分页不起作用的一件事。当返回我的查询时,显示所有数据所需的页数将因不同订单值的数量而异。例如,在I类中可能有1A、1B、1C、1D 4页,而另一类可能是1A、1B、1C、1D、1E 5页。分页仍然是可能的吗?我在上面发布了我的查询以及一个指向查询结果屏幕截图的链接,因为我不知道如何将您的查询转换为我当前的查询。我的理解是,您希望通过页面将内容分开。因此,此查询将pagenum列添加到返回集中。然后,您可以选择所需的数据页。为了使你的查询能够正常工作,只需像前面一样用t加上a。那么你上面写的内容将遵循我最初发布的现有查询?是的。当我写答案时,你没有包括这个查询。这可能是一个愚蠢的问题,但t和t2代表什么?在这个查询中?