Nette\Database nefunguje automatický left join
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- motorcb
- Člen | 552
Zdravím.
Mám následující strukturu MYSQL db:
CREATE TABLE `bazar` (
`id` INTEGER NULL AUTO_INCREMENT DEFAULT NULL,
`user_id` INTEGER NULL DEFAULT NULL,
`shop` VARCHAR(10) NULL DEFAULT NULL,
`date` DATETIME NULL DEFAULT NULL,
`title` VARCHAR(100) NULL DEFAULT NULL,
`text` MEDIUMTEXT NULL DEFAULT NULL,
KEY (`id`, `user_id`),
PRIMARY KEY (`id`, `user_id`),
UNIQUE KEY (`id`),
FULLTEXT KEY (`title`, `text`)
);
CREATE TABLE `bazar_comment` (
`id` INTEGER NULL AUTO_INCREMENT DEFAULT NULL,
`bazar_id` INTEGER NULL DEFAULT NULL,
`user_id` INTEGER NULL DEFAULT NULL,
`date` DATETIME NULL DEFAULT NULL,
`text` MEDIUMTEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`, `bazar_id`, `user_id`)
);
-- ---
-- Foreign Keys
-- ---
ALTER TABLE `bazar_comment` ADD FOREIGN KEY (bazar_id) REFERENCES `bazar` (`id`);
-- ---
-- Table Properties
-- ---
-- ALTER TABLE `bazar` ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
-- ALTER TABLE `bazar_category` ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
Pokouším se vypsat seznam všech položek v tabulce „bazar“ a ke každé počet komentářů (tabulka bazar_comment)
Používám následující dotaz:
$this->context->database->table('bazar')->select('bazar.*')->select('COUNT(bazar_comment:bazar_id) AS commentsCount')->group('id')
Ovšem vykonávání skončí chybou v dotazu:
SELECT `bazar`.*, COUNT(`bazar_comment`.`bazar_id`) AS `commentsCount`
FROM `bazar`
LEFT JOIN `bazar_comment` ON `bazar`.`` = `bazar_comment`.`bazar_id`
GROUP BY `id`
Je špatně najoiněná tabulka bazar, kde chybí název sloupce:
LEFT JOIN bazar_comment
ON bazar
.`` =
bazar_comment
.bazar_id
Nevěděl by někdo kde dělám chybu? V návrhu db, nebo snad v kodu?
- motorcb
- Člen | 552
hrach:
Ups, díky za připomenutí :) Databáze nyní vypadá takto:
Dochází stále ke stejnému problému :(
CREATE TABLE `bazar` (
`id` INTEGER NULL AUTO_INCREMENT DEFAULT NULL,
`user_id` INTEGER NULL DEFAULT NULL,
`bazar_category_id` INTEGER NULL DEFAULT NULL,
`shop` VARCHAR(10) NULL DEFAULT NULL,
`date` DATETIME NULL DEFAULT NULL,
`title` VARCHAR(100) NULL DEFAULT NULL,
`text` MEDIUMTEXT NULL DEFAULT NULL,
KEY (`id`),
PRIMARY KEY (`id`),
UNIQUE KEY (`id`),
FULLTEXT KEY (`title`, `text`)
);
CREATE TABLE `bazar_comment` (
`id` INTEGER NULL AUTO_INCREMENT DEFAULT NULL,
`bazar_id` INTEGER NULL DEFAULT NULL,
`user_id` INTEGER NULL DEFAULT NULL,
`date` DATETIME NULL DEFAULT NULL,
`text` MEDIUMTEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`)
);
-- ---
-- Foreign Keys
-- ---
ALTER TABLE `bazar_comment` ADD FOREIGN KEY (bazar_id) REFERENCES `bazar` (`id`);
-- ---
-- Table Properties
-- ---
-- ALTER TABLE `bazar` ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
-- ALTER TABLE `bazar_comment` ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;