php - MYSQL PHP API - 在另一个表的行中显示和获取多行

标签 php mysql api

我正在为我的移动应用程序创建 API。我正在使用 PHP MYSQL 和 Slim 框架(这在很大程度上与这个问题无关)进行开发。

我试图从我的 mysql 数据库中提取多个“ field ”,并为每个“ field ”检索多个“ field 图像”。数据库:

venues        venue_images
------        ------------
id PK         image_venue_id FK (to venues)
venue_name    image_path
active

然后我需要以这种格式输出数据:

{
  "completed_in":0.01068,
  "returned":10,
  "results":[
    {
      "venue_id":"1",
      "venue_name":"NameHere",
      "images": [
         {
           "image_path":"http://www.pathhere.com"
         },
         {
           "image_path":"http://www.pathhere2.com"
         }
      ]
    }
  ]
}

所以基本上,每个 field 的图像都会重复多次。

我当前的代码是:

$sql = "
    SELECT
         venues.id, venues.venue_name, venues.active,
         venue_images.image_venue_id, venue_images.image_path
    FROM
         venues
    LEFT JOIN 
         venue_images ON venue_images.image_venue_id = venues.id
    WHERE
         venues.active = 1
    LIMIT 0, 10
    ";

    $data = ORM::for_table('venues')->raw_query($sql, array())->find_many();
         if($data) {
        foreach ($data as $post) {
            $results[] = array (
                 'venue_id' => $post->id,
                 'venue_name' => $post->venue_name,
                 'images' => $post->image_path
            );
        }

        //Build full json
        $time = round((microTimer() - START_TIME), 5);
        $result = array(
             'completed_in' => $time,
             'returned' => count($results),
             'results' => $results
        );
        //Print JSON
        echo indent(stripslashes(json_encode($result)));
    } else {
         echo "Nothing found";
    }

我当前的代码可以工作,但是它会产生这样的结果:

{
  "completed_in":0.01068,
  "returned":10,
  "results":[
    {
      "venue_id":"1",
      "venue_name":"The Bunker",
      "images":"https://s3.amazonaws.com/barholla/venues/1352383950-qPXNShGR6ikoafj_n.jpg"
    },
    {
      "venue_id":"1",
      "venue_name":"The Bunker",
      "images":"https://s3.amazonaws.com/barholla/venues/1352384236-RUfkGAWsCfAVdPm_n.jpg"
    }
]
}

“地堡”有两张图片。它不是将图像存储在 field 阵列中,而是使用第二张图像创建“The Bunker”的重复行。就像我之前说的,我需要在每个 field 内迭代多个图像。任何帮助将非常感激!谢谢!

最佳答案

您想使用 GROUP_CONCAT

像这样(可能不是 100% 准确:))

$sql = "
    SELECT
         v.id, v.venue_name, v.active,
         GROUP_CONCAT(i.image_path) as venue_image_string
    FROM
         venues v
    LEFT JOIN 
         venue_images i ON i.image_venue_id = v.id
    WHERE
         v.active = 1
    GROUP BY i.image_venue_id
    LIMIT 0, 10
";

您可能需要稍微调整一下,但应该让您走上正轨(注意:以 CSV 格式提供 venue_image_string)

关于php - MYSQL PHP API - 在另一个表的行中显示和获取多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14500748/

相关文章:

php - 从 PHP 数组编写 PDO 搜索查询

mysql - 当用户在 Django 和 Postgres 中接受好友请求时,如何将两行保存到表中?

php - 如何计算数据库表的总和,其中表中的列数?

Python - Flask 导入后无法识别

php - 无法从 mysql 将数据加载到 listview 中

php - OpenCV & PHP & XAMPP

api - 在 mvc Web API Controller 中按字符串 id 搜索

api - 推特 API 限制

php - 使用 "PHP for Android"从 Android 设备执行 Apple 推送通知服务器 (PHP)

mysql - 在 Rails 中拥有持久内存哈希的最佳方法?