Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Stworzenie specyficznego zapytania do bazy danych lub filtrowanie w php, Zniwelowanie powielania się danych w wyniku (1 wiersz = 1 pozycja)
patrix007
post
Post #1





Grupa: Zarejestrowani
Postów: 46
Pomógł: 0
Dołączył: 18.07.2010

Ostrzeżenie: (0%)
-----


Witam (IMG:style_emoticons/default/smile.gif)

Postanowiłem pogłębić nieco moją wiedzę w tej dziedzinie i zabrać się za coś odrobinkę trudniejszego.
Zabawa szła dobrze do pewnego momentu, już wyjaśniam o co mi chodzi.

Mam taką o to bazę danych (a raczej jej potrzebny tutaj fragment):

(IMG:http://members.multimania.co.uk/patriks007/forumPHP/widok.jpg)

Stworzyłem sobie takie oto zapytanie:

(IMG:http://members.multimania.co.uk/patriks007/forumPHP/zapytanie.jpg)

Które daje taki wynik w phpadminie:

(IMG:http://members.multimania.co.uk/patriks007/forumPHP/wynik.jpg)


Moje pytanie polega na tym, jak "unormalnić" ten wynik zapytania ?
Normalną sprawą jest, że funkcja w php mysqli_fetch_assoc listuje ten wynik w taki sam sposób j/w co utrudnia mi strasznie zabawę bo nie mam pomysłu jak to przefiltrować w PHP.
A może nie wpadłem na pomysł i da się to sprytnie poprawić w samym zapytaniu zaoszczędzając sobie sporo dłubania w PHP ?

Aby była całkowita jasność mojej wizji podam przykład wyniku jaki właśnie mnie interesuje:

(IMG:http://members.multimania.co.uk/patriks007/forumPHP/marzenie.jpg)

Bawiłem się troszeczkę GROUP_CONCAT ale moimi pomysłami realizuję powyższy plan co najwyżej połowicznie (IMG:style_emoticons/default/worriedsmiley.gif)

Proszę o rady/pomoc (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Mchl
post
Post #2





Grupa: Zarejestrowani
Postów: 855
Pomógł: 145
Dołączył: 17.07.2008
Skąd: High Memory Area

Ostrzeżenie: (0%)
-----


Wiesz co... nie bardzo chce mi się przepisywać to co wkleiłeś jako obrazek, więc dam przykład na prostszej strukturze.

Wyobraź sobie że są dwie tabele.

1. tabela filmy
id, tytul
--------------------
1, Matrix,
2, Matrix Reloaded
3, Matrix Revolutions


2. tabela ludzie
id, filmId, imieNazwisko, rola
1,1, Andy Wachowski, reżyser
2,2, Andy Wachowski, reżyser
3,3, Andy Wachowski, reżyser
4,1, Keanu Reeves, aktor
5,2, Keanu Reeves, aktor
6,3, Keanu Reeves, aktor
7,1, Carrie-Anne Moss, aktor
8,2, Carrie-Anne Moss, aktor
9,3, Carrie-Anne Moss, aktor


troche niezgodnie z zasadami normalizacji ale to tylko przyklad

Kod
SELECT
  f.id, f.tytul
  GROUP_CONCAT(r.imieNazwisko) AS rezyseria,
  GROUP_CONCAT(a.imieNazwisko) AS aktorzy
FROM
  filmy AS f
INNER JOIN
  (SELECT filmId, imieNazwisko FROM ludzie WHERE rola = 'reżyser') AS r
ON f.id = r.filmId
INNER JOIN
  (SELECT filmId, imieNazwisko FROM ludzie WHERE rola = 'aktor') AS a
ON f.id = a.filmId
GROUP BY f.id
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 9.08.2026 - 01:25