簡體   English   中英

MYSQL 和 PHP 中的 JOIN 查詢

[英]JOIN Query In MYSQL and PHP

我將從 MYSQL 中的所有表中生成特定信息。 我的數據庫中有 5 個表。 IE:

  1. 廣告商

    CREATE TABLE `advertiser` ( `Adv_id` int(11) NOT NULL AUTO_INCREMENT, `Name` char(20) NOT NULL, `F_Name` char(20) NOT NULL, `Address` varchar(40) NOT NULL, `CNIC` int(13) NOT NULL, `Contact` int(11) NOT NULL, `Monthly_fee` varchar(10) NOT NULL, `Region` varchar(10) NOT NULL, `Reg_date` varchar(10) NOT NULL, PRIMARY KEY (`Adv_id`) ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
  2. 公司信息

    CREATE TABLE `company_information` ( `Company_id` int(11) NOT NULL AUTO_INCREMENT, `Company_Name` varchar(20) NOT NULL, `Company_Contact` int(11) NOT NULL, `Company_Address` varchar(30) NOT NULL, PRIMARY KEY (`Company_id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  3. 廣告

    CREATE TABLE `advertisement` ( `Ads_id` int(11) NOT NULL AUTO_INCREMENT, `Adv_id_id` int(11) NOT NULL, `Company_id` int(11) NOT NULL, `Ads_Title` varchar(20) NOT NULL, `Ads_Description` varchar(40) NOT NULL, `Ads_Image` varchar(50) NOT NULL, PRIMARY KEY (`Ads_id`), KEY `Adv_id` (`Adv_id_id`), KEY `Company_id` (`Company_id`), CONSTRAINT `Adv_id` FOREIGN KEY (`Adv_id_id`) REFERENCES `advertiser` (`Adv_id`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `advertisement_ibfk_1` FOREIGN KEY (`Company_id`) REFERENCES `company_information` (`Company_id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
  4. 廣告類型

    CREATE TABLE `ads_type` ( `Ads_type_id` int(11) NOT NULL AUTO_INCREMENT, `Advertisement_id` int(11) NOT NULL, `Full_Channel_Ads` varchar(30) NOT NULL, `Logo_Ads` varchar(30) NOT NULL, `Com_Break_Ads` varchar(30) NOT NULL, PRIMARY KEY (`Ads_type_id`), KEY `Advertisement_id` (`Advertisement_id`), CONSTRAINT `Advertisement_id` FOREIGN KEY (`Advertisement_id`) REFERENCES `advertisement` (`Ads_id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  5. 廣告日期

    CREATE TABLE `ads_date` ( `Ads_date_id` int(11) NOT NULL AUTO_INCREMENT, `Ads_id` int(11) NOT NULL, `Starting_Date` varchar(30) NOT NULL, `Expiry_Date` varchar(30) NOT NULL, PRIMARY KEY (`Ads_date_id`), KEY `Ads_id` (`Ads_id`), CONSTRAINT `Ads_id` FOREIGN KEY (`Ads_id`) REFERENCES `advertisement` (`Ads_id`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

我想找回

  • 來自表 Advertiser 的名稱、CNIN 和聯系人
  • 來自 company_information 的 Company_Name
  • Ads_Title 來自廣告
  • Starting_Date 和 Expiry_Date 來自 ads_date。

此查詢適用於上述行:

SELECT * 
    FROM ads_date a
    JOIN advertisement ci ON ci.Ads_id = a.Ads_id
    JOIN company_information ar ON ar.Company_id = ci.Company_id
    JOIN advertiser ad ON ad.Adv_id = ci.Advertiser_id
    WHERE Expiry_Date >= CURDATE()

問題:我還想從 ads_type 中檢索 Advertisement_type。 如何使用JOIN查詢執行此操作? 誰能解釋一下?

你需要另一個join

SELECT * 
FROM   ads_date a
JOIN   advertisement ci ON ci.Ads_id = a.Ads_id
JOIN   company_information ar ON ar.Company_id = ci.Company_id
JOIN   advertiser ad ON ad.Adv_id = ci.Advertiser_id
JOIN   ads_type at ON  at.Advertisement_id = ci.Ads_id -- Here
WHERE  Expiry_Date >= CURDATE()

請嘗試以下查詢:

SELECT * 
    FROM ads_date a
    JOIN advertisement ci ON ci.Ads_id = a.Ads_id
    JOIN company_information ar ON ar.Company_id = ci.Company_id
    JOIN advertiser ad ON ad.Adv_id = ci.Advertiser_id

    JOIN ads_type at ON at.Advertisement_id =ci.Ads_id

    WHERE Expiry_Date >= CURDATE()

添加另一個連接作為

JOIN   ads_type at ON  at.Advertisement_id = ci.Ads_id

然后使用group_by at.Advertisement_id避免重復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM