Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Joinowanie 2 razy tej samej tablicy
Kuziu
post 13.02.2006, 19:54:14
Post #1





Grupa: Zarejestrowani
Postów: 743
Pomógł: 0
Dołączył: 11.11.2003
Skąd: Toruń

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


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 =[


--------------------
Słońce zachodzi ... kolejna noc nadchodzi ...
Go to the top of the page
+Quote Post
nospor
post 13.02.2006, 19:58:35
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Kuziu
post 13.02.2006, 20:29:59
Post #3





Grupa: Zarejestrowani
Postów: 743
Pomógł: 0
Dołączył: 11.11.2003
Skąd: Toruń

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


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

Ten post edytował Kuziu 13.02.2006, 20:39:12


--------------------
Słońce zachodzi ... kolejna noc nadchodzi ...
Go to the top of the page
+Quote Post
ActivePlayer
post 13.02.2006, 21:08:23
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

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


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 ?
Go to the top of the page
+Quote Post
Kuziu
post 13.02.2006, 21:26:18
Post #5





Grupa: Zarejestrowani
Postów: 743
Pomógł: 0
Dołączył: 11.11.2003
Skąd: Toruń

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


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

Ten post edytował Kuziu 13.02.2006, 21:28:21


--------------------
Słońce zachodzi ... kolejna noc nadchodzi ...
Go to the top of the page
+Quote Post
ActivePlayer
post 13.02.2006, 21:33:04
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

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


  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)
Go to the top of the page
+Quote Post
Kuziu
post 13.02.2006, 21:46:05
Post #7





Grupa: Zarejestrowani
Postów: 743
Pomógł: 0
Dołączył: 11.11.2003
Skąd: Toruń

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


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


--------------------
Słońce zachodzi ... kolejna noc nadchodzi ...
Go to the top of the page
+Quote Post
ActivePlayer
post 13.02.2006, 21:51:43
Post #8





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

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


dodaj indexy na polach na których jest 'łączenie'. nie będzie 'przymulać'
Go to the top of the page
+Quote Post
Kuziu
post 13.02.2006, 22:20:54
Post #9





Grupa: Zarejestrowani
Postów: 743
Pomógł: 0
Dołączył: 11.11.2003
Skąd: Toruń

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


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 ?

Ten post edytował Kuziu 13.02.2006, 22:33:17


--------------------
Słońce zachodzi ... kolejna noc nadchodzi ...
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 26.06.2025 - 05:19