Php 显示多表mysql查询
这真的很难解释,但我会尽力做到最好,不会把你们弄糊涂。我有以下表格设计 下面是我的mysqlFiddle来演示这个问题: 正如您所看到的,这些表工作正常,查询显示的是什么避难所有什么服务,但当我试图在我的web上显示这些信息时,我的问题就出现了。我目前正在使用以下代码Php 显示多表mysql查询,php,mysql,sql,Php,Mysql,Sql,这真的很难解释,但我会尽力做到最好,不会把你们弄糊涂。我有以下表格设计 下面是我的mysqlFiddle来演示这个问题: 正如您所看到的,这些表工作正常,查询显示的是什么避难所有什么服务,但当我试图在我的web上显示这些信息时,我的问题就出现了。我目前正在使用以下代码 <?php echo '<p>', "<strong>Shelter id</strong>: " . $query['shelter_id'].'</p>';
<?php
echo '<p>', "<strong>Shelter id</strong>: " . $query['shelter_id'].'</p>';
echo '<p>', "<strong>Shelter name</strong>: " . $query['shelter_name'].'</p>';
echo '<p>', "<strong>Street</strong>: " . $query['street'].'</p>';
echo '<p>', "<strong>City</strong>: " . $query['city'].'</p>';
echo '<p>', "<strong>Postcode</strong>: " . $query['postcode'].'</p>';
echo '<p>', "<strong>Contact Number</strong>: " . $query['phone_number'].'</p>';
echo '<p>', "<strong>Location</strong> : " . $query['location_name'].'</p>';
?>
但是对于我使用的查询,它不会将所有信息复制到一行中,而是为服务名称创建多行
我是否可以创建一个查询,返回庇护所可以在一行上执行的所有服务
编辑:我需要做两个单独的查询吗?一个用于获取通用避难所信息,然后另一个查询用于将服务返回到数组中,然后在页面上运行它们?使用
GROUP\u CONCAT
怎么样?它所做的是将这些值组合成逗号分隔的值。以后可以在PHP
中使用Explode()
SELECT shelter_name,
GROUP_CONCAT(services.service_name) service_name
FROM shelter
INNER JOIN shelter_service
ON shelter.shelter_id= shelter_service.shelter_id
INNER JOIN services
ON shelter_service.service_id = services.service_id
GROUP BY shelter.shelter_id, shelter_name
ORDER BY shelter_name
GROUP_CONCAT()仅在行数有限(10-100)时使用,如果数据较大,将大大降低查询速度
2个查询(一个用于类型,一个用于数据)
保留此查询并修改结果(我最喜欢的方式)。
在服务器或JS上通过数据循环并重新构造它(添加1个额外维度)
var new_data={};
for(vari in data)//数据是您的$query
{
var行=数据[i];
//创建阵列的另一层(在二维中创建)
if(typeof(新数据[行['Service\u name'])=='未定义)
新的_数据['Service_name']=[];
//只添加这种类型的数据
新的数据['Service\u name'].push(数据);
}
//现在,您可以删除数据并使用新的_数据
.4.确保查询按服务名称进行主要排序,并且当您在显示(echo)处循环时,显示当前服务名称。
$current_name='';
对于(…)
//如果我们传递给循环中的新服务
if($query['service\u name']!=$current\u name){
echo'.$query['service_name'].//显示新服务
$current_name=$query['service_name'];
}
再一次,JW,你加入了save the day!该查询似乎完美地返回了信息。我以前没有使用过“Explode()”方法,它到底是如何工作的?太棒了,该查询可以返回所有需要的元素。但是在显示信息时遇到了一些问题。我使用了“var_dump”它显示数组包含正确的信息,但是我如何以用户可以看到的方式显示它呢?我猜了一下;echo“”,“服务“:”。explode(“,”,$query['service\u name]”)“”;太棒了!在数组上做了一个foreach循环,然后显示了每个元素,现在我们有了这个!可能是除horray之外最糟糕的代码!JW,GROUP_CONCAT可以包含两个可提取的数据类型吗?或者我必须创建两个GROUP_CONCAT吗?该死,我需要返回的不仅仅是动物的名字。si是一个非常愚蠢的想法吗是否使用超过1个组?
$current_name = '';
for(...)
//if we passed to a new service in the loop
if ($query['service_name'] != $current_name) {
echo '<h3>'.$query['service_name'].'</h3>;//display the new service
$current_name = $query['service_name'];
}