2011-08-02 96 views
1

我有一个复杂的查询(我认为)以及是否有更好的方法来解决这个问题,因为显然这不起作用。4 mysql表连接?

我有4个表,不知何故需要加入他们。我需要从一个表中获取red_value,blue_value和green值,其中另一个表的ID = {某个数字}和图层= {某个数字}。

下面是表:

product_color: 
    **color_id (primary)** 
    red_value 
    green_value 
    blue_value 

set_color: 
    **setcolors_id(primary)** 
    **school_art_id (school_art -primary key)** 
    **baseimage_id (baseimage - primary key)** 
    **color_id (product_color - primary key)** 
    layer (same number value as the layer in the "baseimage"table) 

baseimage: 
    **id (primary key)** 
    layer (same value as layer in "set_color") 

school_art: 
**id (primary key)** 

下面是代码:

public function select_colors($value, $layer) { 
global $db; 
$result_array = mysql_query(" 
    SELECT * 
    FROM set_colors 
    INNER JOIN school_art ON set_colors.{$value} = school_art.id 
    INNER JOIN base_product_color ON set_colors.color_id = base_product_color.color_id; 
    INNER JOIN mbaseimage ON set_colors.baseimage_id = baseimage.id  
    WHERE set_colors.{$layer} = baseimage.layer 
    " 
); 
return $result_array; 

}

所以我希望做的是调用类和

get the red_value, green_value and blue_value from the "product_color" table 
WHERE the "color_id" = the "color_id" of the "set_colors" 
and "school_art_id" = the {$value} 
and "layer" = {$layer} 

预先感谢您。

+0

那么究竟是什么问题呢? 它不会产生正确的结果吗?它太慢了吗? – andsens

+0

没有得到任何结果。没有错误。但没有结果 – GGcupie

+0

你传递给函数的'$ value'和'$ layer'的值是什么? – Hammerite

回答

0

你说“显然这不起作用”。目前尚不清楚你的意思。你是如何得出这个结论的?是因为你加入了4张桌子,你认为这是很多加入的桌子吗?我不认为4表是一个惊人的大量表加入,特别是因为你似乎正在使用主键加入。更好的问题是数据库设计是否标准化。假设它是,我看不到发布的查询有任何真正的问题。

关于标准化问题,表set_colorbaseimage中出现的列layer在其中一个表中似乎是冗余的。除非我误解了你想要沟通的内容,这是一个取决于baseimage_id的属性,但它不是一个识别属性。所以,它应该从其中一个表中删除。如果您要查询没有出现layer的表格,并且需要查找layer的值,则只需加入找到该表格的表格即可。

编辑:

WHERE set_colors.{$layer} = baseimage.layer 

这真的是你是什么意思?