Php 从查询返回多个数组

Php 从查询返回多个数组,php,mysql,arrays,Php,Mysql,Arrays,我有两张桌子 第一个名为services的表具有id\u服务、名称和日期。描述 第二个名为services\u images的表有id\u img、img\u name、id\u service 假设现在我必须使用一个查询(如果可能的话)返回2个数组 第一个数组,包含来自表“服务”中一个特定id的字段 第二个数组,包含与表中“服务”中的“服务”中所选id相关的所有图像的字段 或者更好的是,只有一个数组具有与1中所述相同的数据,其中一个数组名为“images”,其中包含表“services\u i

我有两张桌子

第一个名为
services
的表具有id\u服务、名称和日期。描述 第二个名为
services\u images
的表有id\u img、img\u name、id\u service

假设现在我必须使用一个查询(如果可能的话)返回2个数组

第一个数组,包含来自表“服务”中一个特定id的字段 第二个数组,包含与表中“服务”中的“服务”中所选id相关的所有图像的字段

或者更好的是,只有一个数组具有与1中所述相同的数据,其中一个数组名为“images”,其中包含表“services\u images”中列出的所有图像

我需要它来处理和显示html页面中的数据,这是唯一的方法

如果我不能在mysql中完成,我如何在PHP中安排它,我唯一能想到的就是2个查询

另外,我一直在努力提高我的技能,因为我过去对所有事情都只做一次查询,有没有可能只做一次查询?
谢谢

编辑:我现在明白你的意思了——我第一次误解了

实现这一点的唯一方法是执行多个查询。您必须执行以下操作:

$sql = "SELECT * FROM services WHERE id_service=$id";
$result = mysql_query($sql);
$services = mysql_fetch_array($result);

$new_sql = "SELECT * FROM services_images WHERE id_service=$id";
$new_result = mysql_query($sql);
while($row = mysql_fetch_array($result)){
     $serivices_images[] = $row;
}
我终于又改变主意了。。试试这个:

SELECT services.*,services_images.* FROM services, services_images WHERE services.id_service=services_images.id_service AND services.id_service=$id
现在,当您执行
while($row=mysql\u fetch\u array($sql\u query\u result))
时,您可能会返回所有行。。。但我不知道。只是一个猜测。

对于带有PDO的EAX示例:

$db = new PDO($dsn, $user, $pass);

$sql = 'SELECT services.id_service, services.name, services.date, services.description, services_images.id_image, services_images.img_name
FROM services, services_images
WHERE services.id_service = services_images.id_service
ORDER BY services.id_service';

$services = array();

foreach($db->query($sql) as $row)
{
   $serviceId = $row['id_service'];

   if(!array_key_exists($serviceId, $services))
   {
      $services[$serviceId] = array(
          'name' => $row['name'],
          'date' => $row['date'],
          'description' => $row['description'],
          'services_images' => array()
      );
   }

   $imgId = $row['id_img'];
   $services[$serviceId]['services_images'][$imgId] => array(
      'id_image' => $imgId,
      'img_name' => $row['img_name']
   ); 
}

print_r($services);
不过要小心。。如果要加入的两个表(在本例中为
services
services\u images
)中有任何列具有相同的名称,则只能获取行中检索到的最后一个表的值,除非在select语句中使用别名或将其排除


此外,如果结果的大小很大,您可能需要使用两个类似于Thomas建议的查询,因为您可能没有足够的内存来保存完整的数组结构。

我还没有测试它,但它似乎只会给我第一个id\u图像?对于每个服务id,我喜欢>30个图像,因此我们需要另一个查询来循环结果。否。。这将为您提供
services\u images
表中的每一条记录,只要这两个条目都存在,就会与
services
表中的相关数据结合起来。在sql客户机中运行它,看看会发生什么:-)谢谢,我现在得到了它!那也没关系!1查询在php中重新组织这就是我的想法!谢谢大家!