2

这真的很难解释,但我会尽力做到最好,而不会让大家感到困惑。我有以下表格设计;

mysql表

这是我的mysqlFiddle来演示这个问题:http ://sqlfiddle.com/#!2/1363c/1

如您所见,表格工作正常,查询显示哪些收容所提供哪些服务,但是当我尝试在我的网络上显示此信息时出现问题。我目前正在使用以下代码;

<?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>'; 
?>

但是对于我正在使用的查询,它不会将所有信息复制到一行中,我认为它会为 service_name 创建多行。

我是否可以创建一个查询来返回庇护所可以在一行上执行的所有服务?

编辑:我必须做 2 个单独的查询吗?一个获取通用避难所信息,然后另一个查询将服务返回到一个数组中,然后在页面上运行它们?

4

2 回答 2

1

如何使用GROUP_CONCAT?它的作用是将值组合成逗号分隔值。并且您可以稍后Explode()PHP.

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
于 2013-02-28T15:16:45.930 回答
1
  1. GROUP_CONCAT() 仅在您的行数有限(10-100)时使用,如果数据较大会大大降低您的查询速度。

  2. 2 个查询(一个用于类型,一个用于数据)

  3. 保留此查询并修改结果(我最喜欢的方式)。在服务器或 JS 上循环处理您的数据并对其进行重组(添加 1 个额外维度)

var new_data = {};
for(var i in data)//data is your $query
{
  var row = data[i];
  //create another layer of the array (make it in 2 dimensions)
  if (typeof(new_data[row['Service_name']) == 'undefined)
     new_data['Service_name'] = [];
   //add only this kind of type data
     new_data['Service_name'].push(data);
 }
//now you can remove the data and use new_data

.4. 确保查询主要按服务名称排序,并且当您在显示(回显)处循环时,您会显示当前服务名称。

$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'];
}
于 2013-02-28T15:39:56.440 回答