PHP / MYSQL - 使用哪个Join语句来简化我的查询?

时间:2012-08-22 05:21:55

标签: php mysql join

我有这两个查询,我想将它们合并为一个,但我不确定如何去做。

查询1:

$query = "SELECT * FROM ".$db_tbl_comics." WHERE ".$db_fld_comics_publisher."='".$pub_id."'
AND ".$db_fld_comics_active."='1' GROUP BY ".$db_fld_comics_arc;

查询2:

$q2 = mysql_query('SELECT '.$db_fld_arcs_title.' FROM '.$db_tbl_arcs.'
WHERE '.$db_fld_arcs_id.'="'.$result[$db_fld_comics_arc].'"');

漫画表:

CREATE TABLE IF NOT EXISTS `comics` (
  `id` varchar(255) NOT NULL,
  `arc` int(255) NOT NULL,
  `title` varchar(255) NOT NULL,
  `issue` decimal(5,1) DEFAULT NULL,
  `price` decimal(10,2) NOT NULL,
  `plot` longtext NOT NULL,
  `publisher` int(255) NOT NULL,
  `isbn` varchar(255) NOT NULL,
  `published` date NOT NULL,
  `cover` varchar(255) NOT NULL DEFAULT './images/nopic.jpg',
  `added` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `views` int(255) NOT NULL DEFAULT '0',
  `active` int(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `arc` (`arc`,`title`,`issue`,`publisher`)
);

弧形表:

CREATE TABLE IF NOT EXISTS `arcs` (
  `id` int(255) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `plot` longtext NOT NULL,
  `added` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `title` (`title`)
);

我需要做的是从弧形表中获取相应漫画弧的弧形标题。

2 个答案:

答案 0 :(得分:1)

就像(将2个查询合二为一,只选择必填字段并使用IN)一样简单:

SELECT
    '.$db_fld_arcs_title.'
    FROM '.$db_tbl_arcs.'
    WHERE '.$db_fld_arcs_id.' IN (
        SELECT '.$db_fld_comics_arc.'
            FROM '.$db_tbl_comics.' 
            WHERE '.$db_fld_comics_publisher.'='".$pub_id."'
            AND '.$db_fld_comics_active.'='1' GROUP BY '.$db_fld_comics_arc.'
    )

答案 1 :(得分:1)

你需要使用INNER JOIN,因为我认为两个表都有记录。

SELECT  a.*, b.title
FROM    comics a INNER JOIN arcs b
            on a.id = b.id
WHERE   a.Title = 'VALUEHERE'

显示comics表中的所有详细信息和弧的标题