Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 显示多表mysql查询_Php_Mysql_Sql - Fatal编程技术网

Php 显示多表mysql查询

Php 显示多表mysql查询,php,mysql,sql,Php,Mysql,Sql,这真的很难解释,但我会尽力做到最好,不会把你们弄糊涂。我有以下表格设计 下面是我的mysqlFiddle来演示这个问题: 正如您所看到的,这些表工作正常,查询显示的是什么避难所有什么服务,但当我试图在我的web上显示这些信息时,我的问题就出现了。我目前正在使用以下代码 <?php echo '<p>', "<strong>Shelter id</strong>: " . $query['shelter_id'].'</p>';

这真的很难解释,但我会尽力做到最好,不会把你们弄糊涂。我有以下表格设计

下面是我的mysqlFiddle来演示这个问题:

正如您所看到的,这些表工作正常,查询显示的是什么避难所有什么服务,但当我试图在我的web上显示这些信息时,我的问题就出现了。我目前正在使用以下代码

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