Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Joinowanie 2 razy tej samej tablicy
Forum PHP.pl > Forum > Bazy danych > MySQL
Kuziu
Witam,

Napotkałem na kolejny problem :/
Nie wiem jak napisać zapytanie które by połączyło 2 razy tą samą tebele do 1

users -> id, nick
games -> id, userID1, userID2

  1. SELECT nick
  2. FROM games
  3. LEFT JOIN users ON (games.userID1 = users.id)


W taki sposob poznam NICK 1 user'a a jak poznać drugiego ?

THX =[
nospor
czy ty chociaz uruchomiles to zapytanie? zwroci ci ono nicki tych graczy, ktorzy mają wpis w tabeli "games". jesli w tej tablei znajduje sie tylko jeden gracz, to i tylko jednego nicka dostaniesz

ps: i umieszczaj te tematy na Mysql, bo tej bazki jak mniemam one dotyczą. przenosze

edit: sorki, moj blad. nie zaczailem oco ci chodzi ... sad.gif
Kuziu
No i właśnie pytam jak za 1 razem pobrać nick i 1 i 2 osoby z tabeli GAMES.

To mi zwróci nick userID1 a jak jednoczesnie pobrać nick user'a 2 ?


Chodzi mniej więcej o to:

users:
1, jaroslaw
2, lech

games:
1, 1, 2

Wyciągamy osoby grające w grze o ID numer 1

Wynik:
Gracz1 -> jaroslaw
Gracz2 -> lech
ActivePlayer
podpowiem CI. w mysql(i nei tylko w mysql) istnieje cos takiego jak alias(wydaje mi sie ze wlasnie taka jest nazwa :-)) mozna ich uzywac w nast sposob:
  1. SELECT s.name AS name
  2. FROM something
  3. s WHERE s.id=1

myslisz ze moze to Ci w czyms pomoc ?
Kuziu
Myślę że nie.

Uzyskam albo Nick 1 albo 2 gracza

Gdyż dam
  1. WHERE game.player1ID = users.id


Lub

  1. WHERE game.player2ID = users.id


:/

Natomiast Gdy dam
  1. WHERE game.player1ID = users.id OR game.player2ID = users.id
nie będę wiedział kto był 1 a kto 2 :/ i nie bede mogl wyswietlic ich w odpowiedniej kolejnosci
ActivePlayer
  1. SELECT u1.nick AS nick1, u2.nick AS nick2
  2. FROM games
  3. LEFT JOIN users u1 ON (games.userID1 = u1.id)
  4. LEFT JOIN users u2 ON (games.userID2 = u2.id)
Kuziu
Ok poszło i to swietnie.

Teraz ostatnie pytanko.

Czy to nie będzie za bardzo przymulać ?

Może jednak rozbić to na 2 zapytania ? czy tak zostawić ?

A może macie jakiś pomysł na lepsze zaplanowanie tego.


THX za pomoc
ActivePlayer
dodaj indexy na polach na których jest 'łączenie'. nie będzie 'przymulać'
Kuziu
HHMmmmm

Moze to pytanie z podstaw ale co daje index dla pola ?

---------

Ok znalzałem że przyśpiesza wykonywanie SELECT'a

Ale

"The maximum index length is 256 bytes,..."

Czy to ma jakiś związek z ilością danych w tabeli ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.