【问题标题】:PHP/MYSQL Join and distinct multiple tables and show results by 2 criteriaPHP/MYSQL 连接和区分多个表并按 2 个条件显示结果
【发布时间】:2014-10-31 22:35:45
【问题描述】:

我已经像我一样搜索了一个问题,但我没有找到任何东西:-(,所以,我决定提出一个问题。我在一家旅行社网站上工作,但我被困住了。我有6张桌子:

1. category 2. country 3. city 4. type 5. offer 6. price

现在,每个人的关系是这样的:在offer表中记录了categorycountrycitytype的id,在price表中记录了offer ID。这样,通过管理面板,该过程首先创建一个新报价,然后为该报价创建价格。这是报价 id 记录在价格表中而不是反向的方式。

我现在拥有的如下:

SELECT DISTINCT 
  price.prFood,
  offer.* 
FROM
  category,
  country,
  city,
  `type`,
  price 
  INNER JOIN offer 
    ON price.prOfferID = offer.offerID 
WHERE offerType = typeID 
  AND categoryID = offerCategory 
  AND countryID = offerCountry 
  AND prOfferID = offerID 
  AND offerActive = '1' 
  AND offerCity = cityID ;

此查询仅一次正确显示每个有价格的报价,但我需要同时显示有效且没有价格的报价。所以,我需要一点帮助来正确查询以显示所有有效的、有价格或没有价格的优惠

【问题讨论】:

    标签: php mysql join distinct criteria


    【解决方案1】:

    对您的价格表使用左连接并将 where 条件移入 on 子句。我已经使用别名来给表命名,所以如果我没有选择正确的列,请为列使用正确的别名。

    SELECT DISTINCT 
      p.prFood,
      o.* 
    FROM
    offer o
    LEFT JOIN price p ON  o.offerID = p.prOfferID 
    INNER JOIN  category ca ON o.offerCategory = ca.categoryID
    INNER JOIN  country c ON o.offerCountry = c.countryID 
    INNER JOIN  city ci ON o.offerCity = ci.cityID 
    INNER JOIN `type` t ON o.offerType = t.typeID 
    AND o.offerActive = '1' 
    

    【讨论】:

    • 感谢您的回复。我刚刚尝试过,但它只是说没有优惠活动:-(我不知道我在做什么,但我会重新检查并再次回复。
    • @MKhalid,请使用大写的“我”来指代自己。我通常只是默默地解决这些问题,但是您有很多问题可能需要编辑:)
    • @Oldi 你能提供你的表的样本数据集@sql fiddle 吗?
    • @MKhalidJunaid 我会输入一个 txt 并发送链接。谢谢
    • @Oldi no not here in comment box :) 编辑您的问题并在此处添加带有表定义的示例数据集或在sqlfiddle.com 上并提供该小提琴的链接
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    • 1970-01-01
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    相关资源
    最近更新 更多