@lexstile

Как правильно составить sql запрос?

Есть запрос:
public function eventList($route) {
		$max = 10;
		$params = [
			'max' => $max,
			'start' => ((($route['num'] ?? 1) - 1) * $max),
		];
		return $this->db->row('
			SELECT events.id, events.name as event_name, events.country_id, events.description, countries.name as country_name, GROUP_CONCAT(links.link) as links FROM events
			JOIN countries ON events.country_id = countries.id
			JOIN links ON events.id = links.event_id
			ORDER BY id DESC
			LIMIT :start, :max
		', $params);
	}

Нужно получать события из таблицы event, даже если в таблице links нет записей связанных с конкретным событием.
Сейчас получается, что выводятся записи только те, у которых есть связанные записи в таблице links.
  • Вопрос задан
  • 78 просмотров
Решения вопроса 1
tsklab
@tsklab
Здесь отвечаю на вопросы.
Вам нужно добавить:GROUP BY events.id
Например
Всё работает:
CREATE TABLE `author` (
   `id` INT(10) NOT NULL,
   `name` VARCHAR(200) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
   `fam` VARCHAR(200) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
   `birthday` DATE NULL DEFAULT NULL,
   PRIMARY KEY (`id`)
);
 
CREATE TABLE `books` (
   `id` INT(10),
   `id_author` INT(10) NULL DEFAULT NULL,
   `book` VARCHAR(500) NULL DEFAULT NULL COLLATE 'utf8_unicode_ci',
   PRIMARY KEY (`id`),
   INDEX `id_author` (`id_author`)
);

INSERT INTO `author` (`id`, `name`, `fam`, `birthday`) VALUES (1, 'Николай Николаевич', 'Носов', '2008-11-23');
INSERT INTO `author` (`id`, `name`, `fam`, `birthday`) VALUES (2, 'Артур Конан', 'Дойль', '1859-05-22');
 
INSERT INTO `books` (`id`, `id_author`, `book`) VALUES (1, 1, 'Незнайка учится');
INSERT INTO `books` (`id`, `id_author`, `book`) VALUES (2, 1, 'Незнайка-путешественник');
INSERT INTO `books` (`id`, `id_author`, `book`) VALUES (3, 1, 'Винтик, Шпунтик и пылесос');

SELECT a.id, a.name, a.fam, GROUP_CONCAT(DISTINCT b.book ORDER BY b.book ASC SEPARATOR ', ') AS books
FROM `author` a
LEFT JOIN `books` b ON a.id=b.id_author
GROUP BY a.id;
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы