Group přes jiný sloupec, jak popsat join

ludek
Člen | 83
+
0
-

Zdravím,
mám 2 tabulky, druhá je připojena přes více sloupců a potřebuji GROUP BY z druhé tabulky přes jiný než odvoditelný sloupec.

Příklad: autoři v různých rolích (autor, překladatel). Autoři/překladatelé jsou rozděleni ještě podle jazyků. Úkolem je spočítat kolik knih bylo přeloženo autorem píšícím v daném jazyce.

Funkční SQL dotaz:

SELECT
language.name AS jazyk, COUNT(*) AS pocet
FROM book
LEFT JOIN author ON book.translator_id = author.id
LEFT JOIN language ON author.language_id = language.id
GROUP BY author.language_id /*<< toto je problém */

Výsledek:

	|jazyk|pocet|
	|EN   | 123 |
	|PL   |  62 |

Presenter:

$this->database->table('book')->group('translator_id.author.language_id'); // nefunguje: No reference found

//některé další pokusy:
	->group('translator_id.language_id') // ne
	->group('(author, translator_id).language_id') // ne
	->group('(author.translator_id).language_id') // ne
	->group('(translator_id, author).language_id') // ne

Dotaz: jak říct Nette Database, aby provedla JOIN podle určeného sloupce?
Díky.

David Matějka
Moderator | 6445
+
0
-

zkus ->group('translator.language_id')

ludek
Člen | 83
+
0
-

zkus ->group('translator.language_id')

Bohužel ne: Column not found: 1054 Unknown column 'translator.language_id' in 'group statement'

Vyrobí dotaz:

SELECT `book`.*
FROM `book`
LEFT JOIN `author` `translator` ON `book`.`translator_id` = `translator`.`id`
GROUP BY `translator`.`language_id`

Editoval ludek (22. 8. 2017 7:55)

David Matějka
Moderator | 6445
+
0
-

ukaz, jak vypada struktura db

ludek
Člen | 83
+
0
-

Už to funguje. Nejdřív jsem myslel, že to je tím, že moje tabulka s autory se jmenuje jinak (people), ale měl jsem chybu v názvu sloupce u GROUP a to se zkombinovalo s tím, že jsem nevěděl jak to zapsat. Omlouvám se a díky za radu i trpělivost.

toto:

$test = $this->database->table('book')
        ->select('translator.language_id.name AS jazyk, COUNT(*) AS pocet')
        ->group('translator.language_id')->fetch();

vyrobí funkční dotaz

SELECT `language_id`.`name` AS jazyk, COUNT(*) AS `pocet`
FROM `book`
LEFT JOIN `people` `translator` ON `book`.`translator_id` = `translator`.`id`
LEFT JOIN `language` `language_id` ON `translator`.`language_id` = `language_id`.`id`
GROUP BY `translator`.`language_id`

struktura:
schema

Table: book

id				int(11) Auto Increment
name			varchar(50)
author_id		int(11)
translator_id	int(11) NULL

Indexes

PRIMARY	id
INDEX	translator_id
INDEX	author_id

Foreign keys

translator_id	people(id)
author_id		people(id)