MySql, sprawne rozwiązanie

Odpowiedz Nowy wątek
2018-10-10 20:38
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

Pozostało 580 znaków

2018-10-10 20:53
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

Pozostało 580 znaków

2018-10-10 20:59
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.

Pozostało 580 znaków

2018-10-10 21:15
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 :)

Pozostało 580 znaków

2018-10-10 21:20
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.

Pozostało 580 znaków

2018-10-10 21:23
0

Normalnie,

Id, horrors, actions

Pozostało 580 znaków

2018-10-10 21:37
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'
 

Pozostało 580 znaków

2018-10-10 21:37
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)
edytowany 1x, ostatnio: furious programming, 2018-10-10 21:55

Pozostało 580 znaków

2018-10-10 21:53
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)
edytowany 1x, ostatnio: furious programming, 2018-10-10 21:55

Pozostało 580 znaków

2018-10-10 22:08
0

Fajny błąd....

Error Code: 1630. FUNCTION sakila.count does not exist. Check the 'Function Name Parsing and Resolution' section in the Reference Manual 0.000 sec - Michas12 2018-10-10 22:09
Najgłupszy błąd MySQL-a. Wywal spację po COUNT - Marcin.Miga 2018-10-10 22:13

Pozostało 580 znaków

2018-10-11 16:51
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ć?

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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