Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Połaczenie danych z dwóch stron w jednej tabeli.
Forum PHP.pl > Forum > Bazy danych > MySQL
ZaXaZ
Chcę złączyć dane w tabeli `users` ktorych `nick`=`nick2` (czyt. niżej).

Jesli `nick` x doda do `nick2` -> y
a `nick` y doda do `nick2` -> x to je zlaczy w zapytaniu, jesli choc jeden nie podal drugiego to go nie wyswietli, zalezy mi na optymalnym zapytaniu.

Wrazie pytan prosze pytac.

@Refresh, prosze o przeniesienie jesli zly dzial.
Pyton_000
Może coś w tym stylu

  1. SELECT t1.nick FROM users t1 JOIN users t2 ON(t2.nick2=t1.nick) WHERE t1.nick2 = t2.nick

Dostaniesz nicki które są skorelowane ze sobą czyli pary
ZaXaZ
zmieniłem na początku
  1. t1.nick AS nick, t1.nick2 AS nick2
ale nie wyswietla mi gdy probuje tak: $row['nick'] i $row['nick2']

edit: tzn przypisuje w while do zmiennej dane a po pętli robie if empty i tu sie if wykonuje pomimo ze sa dobrze rekordy.
Pyton_000
Magia.. Pokazałbyś lepiej ten kawałek kodu
ZaXaZ
Cytat(Pyton_000 @ 10.08.2014, 08:55:40 ) *
Magia.. Pokazałbyś lepiej ten kawałek kodu


złe kolumny połączyłem - już wyświetla tylko że tak:
"nick z nick2
nick2 z nick"

zamiast
"nick z nick2"
jak to zrobic?

O czym muszę poczytać żeby to zrobić? (powinno łączyć z dwóch stron ale wyświetlać tylko jeden z pary (zamiast dwoch tych samych w drugiej kolejnosci)) czy użycie PHP wchodzi w gre - żeby pomijało co drugi?

Choć chyba lepiej w sql wykonać, żeby mniej obciążało.

edit: a ma ktoś jakiś pomysł żeby co drugi obracało kolejność i tak by się DISTNICT? (Chyba że da się jakoś lepiej).
trueblue
A jak teraz wygląda Twoje zapytanie?
ZaXaZ
Cytat(trueblue @ 11.08.2014, 20:19:42 ) *
A jak teraz wygląda Twoje zapytanie?


Tak jak pisałem, musiałem zmienić połączenie tabel (zamiast nicku to numer, bo druga kolumna mogla by sie zmienic i byc nieaktualna)

  1. SELECT t1.numer AS numer, t1.partner AS partner FROM users t1 JOIN users t2 ON(t2.partner=t1.numer) WHERE t1.partner = t2.numer
trueblue
Nie jestem pewien, ale spróbuj:

  1. SELECT t1.numer AS numer, t1.partner AS partner,concat(least(t1.numer,t1.partner),'-',greatest(t1.numer,t1.partner)) AS tmp FROM users t1 JOIN users t2 ON(t2.partner=t1.numer) WHERE t1.partner = t2.numer GROUP BY tmp
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.