English 中文(简体)
优化 MySQL/PHP 查询
原标题:Optimizing MySQL/PHP queries
  • 时间:2012-05-24 19:17:02
  •  标签:
  • 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
...

SOLUTION:

<?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;
    }
问题回答

我就会做

mysql_query( SELECT producers_name, producers_id
FROM producers
WHERE producers_id IN
(SELECT producers_id FROM foods WHERE groups_id = 1) );

这应该能更快地发挥作用。

祝你好运!





相关问题
SQL SubQuery getting particular column

I noticed that there were some threads with similar questions, and I did look through them but did not really get a convincing answer. Here s my question: The subquery below returns a Table with 3 ...

please can anyone check this while loop and if condition

<?php $con=mysql_connect("localhost","mts","mts"); if(!con) { die( unable to connect . mysql_error()); } mysql_select_db("mts",$con); /* date_default_timezone_set ("Asia/Calcutta"); $date = ...

php return a specific row from query

Is it possible in php to return a specific row of data from a mysql query? None of the fetch statements that I ve found return a 2 dimensional array to access specific rows. I want to be able to ...

Character Encodings in PHP and MySQL

Our website was developed with a meta tag set to... <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> This works fine for M-dashes and special quotes, etc. However, I ...

Pagination Strategies for Complex (slow) Datasets

What are some of the strategies being used for pagination of data sets that involve complex queries? count(*) takes ~1.5 sec so we don t want to hit the DB for every page view. Currently there are ~...

Averaging a total in mySQL

My table looks like person_id | car_id | miles ------------------------------ 1 | 1 | 100 1 | 2 | 200 2 | 3 | 1000 2 | 4 | 500 I need to ...

热门标签