php - 优化 MySQL/PHP 查询

标签 php mysql

我的数据库看起来像这样:

[foods]
foods_id, foods_name, groups_id, producers_id

[producers]
producers_id, producers_name

[groups]
groups_id, groups_name

PHP:

<?php
$producers = mysql_query('SELECT p.producers_name,p.producers_id FROM foods as f,producers as p WHERE p.producers_id = f.producers_id AND f.groups_id = 1 GROUP BY p.producers_name');
    //list the producer...
    while($row = mysql_fetch_array($producers, MYSQL_ASSOC)){
        $foods = mysql_query('SELECT foods_id, foods_name FROM foods WHERE producers_id = '.$row['producers_id'].' ORDER BY foods_name ASC');       
        while($row2 = mysql_fetch_array($foods, MYSQL_ASSOC)){
            //list the foods under this producer...
        }
    }
?>

目标:

PRODUCER A
   FOOD A
   FOOD B
   FOOD C
PRODUCER B
   FOOD D
   FOOD E
PRODUCER C
   FOOD F
...

解决方案:

<?php
$res = mysql_query('SELECT f.foods_id, f.foods_name, p.producers_id, p.producers_name FROM foods f, producers p WHERE p.producers_id = f.producers_id AND f.groups_id = '.$_GET['g'].' ORDER BY p.producers_name ASC, f.foods_name ASC');       
$xproducers = array();
while($row = mysql_fetch_array($res , MYSQL_ASSOC)){
    if(!array_key_exists($row['producers_id'],$xproducers)){
        $xproducers[$row['producers_id']] = array('id'=>$row['producers_id'],'name'=>$row['producers_name'],'foods'=>array());
    }
    array_push($xproducers[$row['producers_id']]['foods'],array('id'=>$row['foods_id'],'name'=>$row['foods_name']));
}
?>

这个解决方案对我来说足够快,也许它并不完美,但它做得很好:)感谢大家的大力帮助!

干杯

最佳答案

我不明白你为什么先选择,这得到相同的数据。

$res = mysql_query('SELECT f.foods_id, f.foods_name, p.producers_id, p.producers_name FROM foods f, producers p WHERE p.producers_id = f.producers_id AND f.groups_id = 1');       
    while($row = mysql_fetch_array($res , MYSQL_ASSOC)){
        $producers[$row['producers_id']][$row['foods_id']] = $row;
    }

关于php - 优化 MySQL/PHP 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10743915/

相关文章:

php - wc_get_products 返回空数组?

Mysql 创建一个事件,该事件永远在每周一、周五和周日更新

MYSQL 查询 - 按月获取总计并显示零总计

php - Codeigniter DB选择逻辑错误

mysql - 用于选择美国多个州的模式设计,或 "all"

php - TCPDF 不会将 SVG 中的异物转换并显示在 PDF 中

php - MySQL 代码导致 PHP 脚本在 popen/exec 崩溃

MySql 旋转表上的最后一个条目

php - 我应该如何存储 AES 加密 key ?

php - PHP 的 SplDoublyLinkedList 类,更重要的是,一般的链表有什么意义?