我有两张桌子
名为services的第一个表具有id_服务、名称和日期。描述
名为services_images的第二个表具有id\u img、img\u name、id\u服务
现在假设我必须返回两个数组,一个查询(如果可能的话)
第一个数组中的字段来自表"services"
第二个数组,包含与表中“服务”中所选id相关的所有图像的字段"services_images"
或者更好的是,只有一个数组具有与1中所述相同的数据,其中一个数组名为“images”,其中包含表中列出的所有图像"services_images"
我需要这个来处理和显示HTML页面中的数据,这是唯一的方法。
如果我在mysql中做不到这一点,我怎么能用php来安排呢,我唯一能想到的就是2个查询
另外,我一直在努力提高我的技能,因为我曾经对所有东西进行单一查询,有没有情况下,使一个查询只是不可能的?
谢谢!

最佳答案

对于带有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);

不过,还是要小心。如果要连接的两个表(在本例中为servicesservices_images)中有任何同名列,则除非在select语句中对它们进行别名或排除它们,否则只能获取行中最后一个检索到的列的值。
此外,如果结果的大小很大,您可能需要使用两个类似于thomas建议的查询,因为您可能没有足够的内存来保存完整的数组结构。

关于php - 从查询中返回多个数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3484483/

10-12 12:59
查看更多