mysql验证来自多个表数据的数据

时间:2013-03-15 01:28:25

标签: php mysql sql database

被修改

我意识到我现在没有包含品牌代码ID主表持有品牌ID,其中只有1001和1002是我关心其他品牌的第三方品牌。

结束编辑的部分

首先感谢所有社区提供的帮助,这里一直非常有用。 我是mysql的一个完全noob,我开发java,javascript和当前的php,在我目前的项目中我面临一个问题,我需要从我们的数据库中检索数据,考虑到我无法以任何方式修改数据库中的问题是如下:

拥有一个销售不同品牌的购物网站,包括两个自有品牌的例子,可以命名为“puma”,“nike”,“ownbrand1”和“ownbrand2”,仓库只保留“ownbrand1”和“ownbrand2”的库存,如果客户购买任何其他品牌,第三家公司将根据需要发送所需产品。 该网站提供了许多过滤结果的选择,其中之一是仅显示我们目前有库存的商品。

假设我们有3个表,第一个表,我们称之为“股票”,每个产品都有内部唯一代码的库存量(仅限自有品牌)第二个“主”具有唯一代码的每个产品的信息id和一般产品ID和第三个表“照片”持有图片,以便在网站上显示图片信息和一般产品ID。

产品由每个产品的唯一产品代码ID标识,这意味着相同的产品但不同的尺寸或颜色将具有不同的代码ID,第二个ID通用产品ID仅针对每个产品而不同,这意味着不同尺寸或颜色将具有相同的产品ID和图片信息,这是一般产品的图片。

------------------------------ 
          Stock 
------------------------------ 
ID            Name         Stock 
00001     puma1             0 
00002     puma2             0 
00003     ownbrand1(s)      0 
00004     ownbrand2(l)      0 
00005     nike              0 
00006     ownbrand1(l)      1 
00007     ownbrand1(m)      3 

---------------------------------------------
        Master 
---------------------------------------------
 ID         Name         GeneralId    BrandId
00001   puma1             pum001      1030
00002   puma2             pum001      1030
00003   ownbrand1(s)      owbr001     1001
00004   ownbrand2(l)      owbr002     1002
00005   nike              nike001     1040
00006   ownbrand1(l)      owbr001     1001
00007   ownbrand1(m)      owbr001     1001

------------------------------ 
        Photo 

------------------------------ 
GeneralId     Picture
pum001      pum001.jpg
owbr001     owbr001.jpg
owbr002    owbr002.jpg
nike001     nike001.jpg

如果仅点击库存商品的选项,页面将显示来自第三方的商品,并且在这种情况下只有来自自有品牌的库存商数量超过0的商品将显示

期望的结果

“puma”=显示
 “nike”=显示
 “ownbrand1”= show(因为它有一些尺寸的库存)
 “ownbrand2”=未显示(因为没有库存)

现在我完成了第一个查询的任务:

$sql_query = "SELECT stock.*, master.*  FROM stock, master WHERE master.ID = stock.ID AND stock.stock > '0'"

然后生成一个数组,其中包含从主表中获取的库存项目的generalID代码,然后生成以下查询:

$sql_query = "SELECT * FROM master WHERE generalID NOT IN $previous_array"

并加入两个数组以生成产品品牌的整个列表,以便在进行一些过滤分类后显示最后一个查询:

$sql_query = "SELECT * FROM photo WHERE generalID IN $complete_array" 

现在这种方法给了我我需要的结果但是你可以期待超过2000件商品和30多个品牌它确实会影响性能速度,我尝试做UNION查询但我真的无法理解我的想法想法。

如果你们中的任何一位sql大师能帮助我理解这一点,那将是一个非常快乐的兔子。

1 个答案:

答案 0 :(得分:1)

SELECT *
FROM 
 (SELECT * 
 FROM stock 
   inner join master using (ID) 
   inner join photo using (generalID)
 WHERE (master.BrandId!=1001 and master.BrandId!=1002) or stock.stock>0
 ) as whatever
GROUP BY master.generalID