Archives du mot-clef subquery

Mysql subquery

Database

CREATE TABLE IF NOT EXISTS `author` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;
 
INSERT INTO `author` (`id`, `name`) VALUES
(1, 'HiO'),
(2, 'Blu'),
(3, 'Pouet');
 
CREATE TABLE IF NOT EXISTS `post` (
  `a_id` INT(10) UNSIGNED DEFAULT NULL,
  `title` text NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
 
INSERT INTO `post` (`a_id`, `title`) VALUES
(1, 'My name is HiO :)'),
(NULL, 'I am an anonymous :)'),
(2, 'My name is Blu :D'),
(3, 'My name is Pouet ><''');

Subquery

SELECT *, (SELECT COUNT(post.a_id) FROM post WHERE post.a_id = author.id) AS post_count FROM `author`

Result

$author = array(
  array('id'=>'1','name'=>'HiO','post_count'=>'1'),
  array('id'=>'2','name'=>'Blu','post_count'=>'1'),
  array('id'=>'3','name'=>'Pouet','post_count'=>'1')
);

Subquery in where clause

SELECT * FROM `post` WHERE a_id IN (SELECT id FROM author)

Result

$post = array(
  array('a_id'=>'1','title'=>'My name is HiO :)'),
  array('a_id'=>'2','title'=>'My name is Blu :D'),
  array('a_id'=>'3','title'=>'My name is Pouet ><\'')
);