MySql, sprawne rozwiązanie

MySql, sprawne rozwiązanie
M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 88
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

szarotka
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 564
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

M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 88
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.

szarotka
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 564
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 :)

M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 88
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.

gośćabc
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Szczecin
  • Postów: 500
0

Normalnie,

Id, horrors, actions

szarotka
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 564
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:

Kopiuj
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'

Marcin.Miga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2794
0
Kopiuj
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)
M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 88
0

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

Kopiuj
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)
Marcin.Miga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2794
0

Fajny błąd....

M1
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 88
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ć?

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.