添加第三个表的php mysql查询帮助

添加第三个表的php mysql查询帮助,php,Php,我需要一个php查询的帮助,并将首先解释我对这个问题的理解 该查询可以(几乎是*)从两个表中随机选择具有特定条件的产品。我的问题是,我不仅需要字段products.vendorid,还需要位于另一个表中的实际供应商名称,表:vendor。因此products.vid是产品的供应商-我需要进入供应商表并查找匹配的字段vendor.company 我不知道如何在这里介绍第三个表,这主要是一个查找。我试图保持在同一个记录集中,想知道子查询在这里是否有用? 查询: SELECT products.pid

我需要一个php查询的帮助,并将首先解释我对这个问题的理解

该查询可以(几乎是*)从两个表中随机选择具有特定条件的产品。我的问题是,我不仅需要字段products.vendorid,还需要位于另一个表中的实际供应商名称,表:vendor。因此products.vid是产品的供应商-我需要进入供应商表并查找匹配的字段vendor.company

我不知道如何在这里介绍第三个表,这主要是一个查找。我试图保持在同一个记录集中,想知道子查询在这里是否有用? 查询:

SELECT products.pid, products.vendorid, products.is_visible, 
       product_description.compare1, product_description.title
FROM products, product_description 
WHERE products.pid >= (SELECT FLOOR( MAX(pid) * RAND()) FROM `products` ) 
  and ((product_description.compare1 = 'Cohasset' ) 
  and (products.is_visible='Yes') and (products.pid = product_description.pid))
LIMIT 5
为了澄清-我需要一个名为“vendor.company”的字段,该字段位于表“vendor”中,其中包含名为“vid”的供应商id,该id与products.vendorid匹配

希望这是有意义的,我感谢你的帮助

*(不是100%:如果生成的随机数比总产品少5个以上,但我现在可以活下去)

要分解这一点:

我需要一个名为“vendor.company”的字段

因此,我们将
vendor.company
添加到顶部的
SELECT
部分的末尾

在“供应商”表中

因此,我们将
供应商
添加到
FROM
列表中

包含与products.vendorid匹配的名为“vid”的供应商id


因此,我们将
vendor.vid=products.vendorid
添加到
WHERE
中,在可能的情况下,我将使用
JOIN
而不是
WHERE

SELECT products.pid
     , products.vendorid
     , products.is_visible
     , product_description.compare1
     , product_description.title
     , vendor.company
FROM products
  JOIN product_description
    ON products.pid = product_description.pid
  JOIN vendor
    ON vendor.vid = products.vendorid
WHERE products.pid >=
        ( SELECT FLOOR( MAX(pid) * RAND())
          FROM products ) 
  and (product_description.compare1 = 'Cohasset') 
  and (products.is_visible = 'Yes') 
LIMIT 5

+1正确和良好的解释。我只会将
WHERE
条件更改为
JOIN
s以加入表。我也一直喜欢自己加入,但我必须诚实地说:我不确定实际区别是什么(任何知道的人,请插话!)。我假设mysql优化为某种连接,但如果我知道什么类型的连接。。。在本例中,我选择尽可能多地保留查询结构,希望让OP能够理解。
SELECT products.pid
     , products.vendorid
     , products.is_visible
     , product_description.compare1
     , product_description.title
     , vendor.company
FROM products
  JOIN product_description
    ON products.pid = product_description.pid
  JOIN vendor
    ON vendor.vid = products.vendorid
WHERE products.pid >=
        ( SELECT FLOOR( MAX(pid) * RAND())
          FROM products ) 
  and (product_description.compare1 = 'Cohasset') 
  and (products.is_visible = 'Yes') 
LIMIT 5