MySql, sprawne rozwiązanie

0

Witam posiadam tabele o dwóch kolumnach osoba_id, type(horror, action itp).
Chciałbym tabelę która posiada 3 kolumny: osoba_id, horror, action gdzie w horror i action będzie ilość dla poszczególnego id. Nie wiem jak zapisać to w dość czytelny i prosty sposób.
Pozdrawiam

1

Po co Ci kolejna tabela.
Masz tabelę o dwóch kolumnach osoba_id, type(horror, action itp).
Dodaj do tej tabeli 3 kolumnę ilość.

Będziesz miał :
user_id type count
Janek Kowalski horror 3
Janek Kowalski action 1
Adam Małysz action 2

0

Jak zrobiłem SELECT user_id, name count(*) AS ILOSC a potem pogrupowałem film_i i name to nie otrzymałem rezultatu jakiego oczekiwałem.

1

Ok, nie chcesz tabeli z liczbą, tylko chcesz wyciągnąć liczbę z innej tabeli, którą już masz?
Wtedy robisz count ale musisz złączyć obie tabele, pokaż co masz albo opisz szerzej kontekst a wtedy się lepiej dogadamy :)

0

Efektem końcowym ma być to, że mam wypisać id gościa który grał w wiekszej ilosci horrorow niz filmów akcji. Więc tabela jaką chce wykonać fajnie jakby posiadała to co mówiłem na początku bo wtedy łatwo będzie to porównać w WHERE.

0

Normalnie,

Id, horrors, actions

1

Widzę to mniej więcej tak:
Tabela (kolumny)
Actor: id, first_name, surname
Movie: id, genre, title
ActorInMovie: actor_id, movie_id

Wyjaśnienie: aktor może grać w wielu filmach, w filmie występuje wielu aktorów.

Wtedy łączysz to, żeby znaleźć ilość filmów per aktor:

SELECT a.id, count(a.id)
FROM Actor a
JOIN ActorInMovie am ON a.id = am.actor_id
JOIN Movie m ON m.id = am.movie_id
GROUP BY a.id
WHERE m.genre = 'horror'

0
select osoba_id from osoby where type in ('horror', 'action') group by osoba_id having count(case when type='horror' then type end)>count(case when type='action' then type end)
0

Mam takie coś ale nie wiem dlaczego wyskakuje błąd:

SELECT  actor_id
FROM film_actor INNER JOIN((Select film_id, name
FROM category INNER JOIN film_category ON category.category_id=film_category.category_id
GROUP BY film_id, name)) as TAB ON TAB.film_id=film_actor.actor_id
WHERE name in('horror', 'action')
GROUP BY actor_id having count (case when name='horror' then name end)>count(case when name='action' then name end)
0

Fajny błąd....

0

Mam jeszcze jedno pytanie. Mam tabele z kolumnami film_id i name. Załóżmy 1-English, 2-English, 3-Spanish, 4-English, 5-Poland i chciałbym kolumne z name gdzie nie powtarzają się nazwy i ilość filmów dla owego języka. Próbowałem tak: Select distinct name, Count(*) from tab ale jak otrzymałem wynik to zobaczyłem, że jest to bez sensu. Da się to jakoś sprawnie zapisać?

1 użytkowników online, w tym zalogowanych: 0, gości: 1