Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Wypisanie danych na podstawie 2 tabel z bazy danych.
Forum PHP.pl > Forum > Przedszkole
KrzysiekKCN
Witam, tak to znowu ja. Jednak nie proszę o pomoc w zapytaniach, składni czy czymkolwiek oprócz odrobiny logiki.
Tak więc chciał bym wyświetlić listę użytkowników których niema na liście znajomych.

Sytuacja wygląda następująco:

Otwarta sesja $_SESSION['uzyt'] $user = $_SESS~ czyli np. $user = 'Kowalski';

Mam 2 tabele:

USERS:
-------------
|ID |USER |
1 kowalski
2 uzytk1
3 uzytk2
4 uzytk3
5 uzytk4
6 uzytk5
7 uzytk6
8 uzytk7
-------------

FRIENDS
---------------------------------------------------
|ID | ID_ZNAJOMEGO | ID_UZYTKOWNIKA |
---------------------------------------------------
1 2 1
2 5 1
3 7 1
----------------------------------------------------

Tak więc kowalski ma 3 znajomych: uzytk1 uzytk4 i uzytk6, a na liście mają wyświetlić się wszyscy oprócz kowalskiego($user) i jego znajomych. Próbowałem już na wszelkie sposoby, fory, while, IFy.

Czy ktoś dał by mi jakąś wskazówkę? Naprawdę nie wiem na jakiej zasadzie logicznie to wyciągnąć.

Proszę o pomoc, w razie niejasności pisać ^^. Z góry dziękuje.
tehaha
Cytat
na liście mają wyświetlić się wszyscy oprócz kowalskiego($user) i jego znajomych
Jeżeli chcesz pobrać ID wszystkich użytkowników oprócz kowalskiego i jego znajomych, to najpierw pobierasz te ID znajomych przy pobieraniu wrzucasz je do tablicy i potem funkcją
  1. implode(', ', $array)
wstawiasz w takie zapytanie:
  1. FROM users WHERE id NOT IN(1, 2, 5, 7)
pmir13
  1. SELECT u.* FROM users u
  2. LEFT JOIN ( SELECT f.id_znajomego FROM users u1
  3. JOIN friends f ON f.id_uzytkownika=u1.id
  4. WHERE u1.user='kowalski' ) z
  5. ON z.id_znajomego=u.id
  6. WHERE u.user <> 'kowalski' AND z.id_znajomego IS NULL
KrzysiekKCN
Hmm implode służy do przemiany tablicy w ciągłe wyrażenie tak?

Czyli nie trzeba go używać jeżeli zastosuje np. takie coś?
  1. $z99 = "select * from `znajomi` where `id_usera`='".$r['id']."' ORDER BY `id`";
  2. $w99 = mysqli_query($mysql, $z99);
  3. while ($r99 = mysqli_fetch_array($w99)) {
  4. $array = $array."'".$r99['id_znajomego']."',";
  5. }


-----------------------------------------------------------------------------------------
pmir13 a czy ty byś mógł objaśnić działanie tego kodu?
pmir13
To co jest w nawiasie z aliasem z to jest lista id znajomych kowalskiego, czyli dla przykładowych danych
Kod
id_znajomego
2
5
7

Łączymy tabelę user z tą listą przez LEFT JOIN po pasujących id, otrzymujemy
wszystkie rekordy z user, i pasujące po id rekordy z listy z, przy czym
jeśli nie pasuje żaden id ze znajomych to jest tam NULL, zwykły JOIN (czyli INNER JOIN)
po prostu pominąłby rekordy z NULL.
Czyli bez where i nie ograniczając kolumn w select (select * from...) dostalibyśmy:
Kod
id      user         id_znajomego
1       kowalski     NULL
2       uzytk1       2
3       uzytk2       NULL
4       uzytk3       NULL
5       uzytk4       5
6       uzytk5       NULL
7       uzytk6       7
8       uzytk7       NULL

Teraz pozostaje tylko sprawdzić gdzie jest NULL i pominąć kowalskiego, bo wprawdzie sam sobie
znajomym nie jest, ale nas nie interesuje, to wszystko właśnie jest sprawdzane w WHERE.
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.