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

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 :)

1

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...

0

select beads.id as beats_id

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...

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