最有效的MySQL查询?

时间:2012-11-12 17:03:41

标签: php mysql inner-join

我刚刚完成了这个MySQL查询,因为我仍然认为自己是新手,想知道我是否以最有效的方式完成了这项工作?

我有4个表,前2个包含需要相互链接的类别数据和类别关联。第3个表包含产品信息,第4个表包含价格;有些产品价格不止一个,我只需要最低的价格。

          **Category Data**
        cat_id        cat_name
    |:-----------|------------:|
    |  21        |  Cat One    |
    |  22        |  Cat Two    |


            **Category Associations**
         ca_id        cat_id        prod_id
    |:-----------|------------:|:------------:|
    |   1        |    21       |     83       |
    |   2        |    22       |     88       |


                **Product Info**
        prod_id      prod_name    brand_name
    |:-----------|------------:|:------------:|
    |   83       |  Prod One   |  Brand One   |
    |   88       |  Prod Two   |  Brand Two   |


             **Prices**
       prod_id      price_id    
    |:-----------|------------:|
    |   83       |  22.15      |
    |   83       |  25.66      |
    |   88       |  47.23      |
    |   88       |  12.22      |

这是我需要的数据作为输出

    prod_id     prod_name     brand_name      cat_name     lowest_price
|:-----------|------------:|:------------:|:------------:|:------------:|
|   83       |  Prod One   |  Brand One   |  Brand Two   |  22.15       |
|   88       |  Prod Two   |  Brand Two   |  Brand Two   |  12.22       |

我遗漏了很多数据,并且只是为了简化而给出了基础知识。

此查询有效;只是想知道它是否可以改进。数据将存储在一个数组中,并使用javascript进行排序。

SELECT `".DB_PREFIX."products`.prod_id, `".DB_PREFIX."products`.prod_name, `" . DB_PREFIX . "products`.prod_brand, `" . DB_PREFIX . "categories`.cat_name, `" . DB_PREFIX . "products`.prod_image, `" . DB_PREFIX . "products`.prod_field_one, `" . DB_PREFIX . "products`.prod_field_two, `" . DB_PREFIX . "products`.prod_field_three, `" . DB_PREFIX . "products`.prod_field_four, `" . DB_PREFIX . "products`.prod_field_five, `" . DB_PREFIX . "products`.prod_field_six, MIN(`" . DB_PREFIX . "prices`.price) as LowestPrice
FROM (`".DB_PREFIX."products` 
INNER JOIN `".DB_PREFIX."category_associations` ON `".DB_PREFIX."products`.prod_id = `".DB_PREFIX."category_associations`.prod_id)
INNER JOIN `".DB_PREFIX."categories` ON `".DB_PREFIX."category_associations`.cat_id = `".DB_PREFIX."categories`.cat_id     
INNER JOIN `" . DB_PREFIX . "prices` 
ON `" . DB_PREFIX . "prices`.prod_id = `" . DB_PREFIX . "products`.prod_id 
GROUP BY `" . DB_PREFIX . "prices`.prod_id`

谢谢, 西蒙

2 个答案:

答案 0 :(得分:4)

使用EXPLAIN调试您的查询。使用EXPLAIN,您应该能够确定您的查询是否正在使用正确的索引。

答案 1 :(得分:0)

您可以创建所需数据的MySQL view,并简单地将该视图作为表格查询,这样可以从编码/维护的角度改进...