Połączenie tabel JOIN zwraca niewłaściwe ID

Odpowiedz Nowy wątek
2018-11-06 22:52
0

Witam.
Marne moje doświadczenie z 'zaawansowanym' SQL, nie korzystałem wcześniej z łączenia tabel. Wszystko działałoby jak należy, gdyby nie to, że ID rekordów z "beats", które mnie interesują, przybierają ID rekordów z "ratings". Jak skonstruować to zapytanie/co zrobić, żeby ID pozostało właściwe?

$this->query("SELECT * FROM beats INNER JOIN ratings ON beats.id = ratings.id_beat ORDER BY ratings.rate DESC");            
if ($this->resultSet()){
    $beats = $this->resultSet();
    foreach ($beats as $beat){
             echo $beat['id'].' '.$beat['name'].'<br>';

Dzięki za pomoc, pozdrawiam :)

Pozostało 580 znaków

2018-11-06 23:01

To nie wina SQL, tylko PHP.
SELECT * FROM beats INNER JOIN ratings ON beats.id = ratings.id_beat to to samo, co SELECT beats.*, ratings.* FROM beats INNER JOIN ratings ON beats.id = ratings.id_beat, a to to samo co SELECT beats.id, beats...., ratings.id, ratings... FROM beats INNER JOIN ratings ON beats.id = ratings.id_beat
Jak widzis, masz dwie kolumny id. PHP pobierając dane tworzy kolekcję kolumn po kolei z zapytania, a potem wypełnia je danymi. Nie może dwa razy utworzyć kolumny id, więc ma tylko jedną. Ale łądując dane id z ratings jest "później", więc id z beats zostało nadpisane...

edytowany 1x, ostatnio: Marcin.Miga, 2018-11-06 23:02

Pozostało 580 znaków

2018-11-07 22:52
0

select beads.id as beats_id

Pozostało 580 znaków

2018-11-11 11:20
0

Dzięki za pomoc, zmieniłem nazwę ID tylko w 'ratings', więc obyło się bez większych modyfikacji :)
Finalne zapytanie:

"SELECT beats.*, SUM(ratings.rate) AS allrate FROM beats LEFT JOIN ratings ON beats.id = ratings.id_beat GROUP BY id_beat ORDER BY allrate DESC
Marcin.Miga napisał(a):

To nie wina SQL, tylko PHP.
SELECT * FROM beats INNER JOIN ratings ON beats.id = ratings.id_beat to to samo, co SELECT beats.*, ratings.* FROM beats INNER JOIN ratings ON beats.id = ratings.id_beat, a to to samo co SELECT beats.id, beats...., ratings.id, ratings... FROM beats INNER JOIN ratings ON beats.id = ratings.id_beat
Jak widzis, masz dwie kolumny id. PHP pobierając dane tworzy kolekcję kolumn po kolei z zapytania, a potem wypełnia je danymi. Nie może dwa razy utworzyć kolumny id, więc ma tylko jedną. Ale łądując dane id z ratings jest "później", więc id z beats zostało nadpisane...

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