Zapisywanie zmiennej

0

Siema. Od kilku dni uczę się PHP, MySQL itd. ale trafiłem na pewien problem. W bazie danych mam dwie tablice: planets i users. W skrypcie galaxy.php, gdzie wszystko jest w zasadzie w HTMLu jest fragment PHP. Próbuję odtworzyć podgląd galaktyki w stylu starego OGame. Przy pobieraniu zmiennej bezpośrednio z jednej tablicy (na przykład nazwa planety), wszystko działa okej. Natomiast w kwestii nazwy gracza jest problem. Najpierw muszę pobrać id właścicela planety , który jest w tabeli planets, a następnie chcę zapisać to ID, żeby wyszukać odpowiednią nazwę gracza z tabeli users na podstawie tego zapisanego ID. Oto moje dwie tabele:

USERS:
| users_id | users_username | users_password | users_email | users_galaxy | users_starsystem | users_planet | users_planetid |

PLANETS:
| planets_id | planets_galaxy | planets_starsystem | planets_planet | planets_ownerid | planets_name | planets_moons | planets_orbitmetal | planets_orbitcrystal |

I tu mój kod, który na testowej stronie nie wyświetla nic przy takiej konfiguracji:

<?php
$testowanaGalaktyka = 1;
$testowanySystem = 1;
$testowanaPlaneta = 1;
$testowanyGracz = -666;
$testowanyGracz2 = -666;

$sql = "SELECT planets_ownerid FROM planets WHERE planets_galaxy = $testowanaGalaktyka AND planets_starsystem = $testowanySystem AND planets_planet = $testowanaPlaneta";
$testowanyGracz = array($row["planets_ownerid"]);
$testowanyGracz2 = &$testowanyGracz;
$sql = "SELECT users_username FROM users WHERE users_id = $testowanyGracz2";
$result = $conn->query($sql);

							
if($result->num_rows>0)
{
   while($row = $result->fetch_assoc())
   {
      echo '<b>'.$row["users_username"]."</b>";
    }
}
else
{
   echo '<p style="color:red;"></p>';
}
$conn->close();
?>

Natomiast taki kod zwraca mi ID właściciela planety poprawnie:

<?php
$sql = "SELECT planets_ownerid FROM planets WHERE planets_galaxy = $testowanaGalaktyka AND planets_starsystem = $testowanySystem AND planets_planet = $testowanaPlaneta";
$testowanyGracz = array($row["planets_ownerid"]);

$result = $conn->query($sql);

						
if($result->num_rows>0)
{
   while($row = $result->fetch_assoc())
   {
      echo '<b>'.$row["planets_ownerid"]."</b>";
   }
}
else
{
   echo '<p style="color:red;"></p>';
}
$conn->close();
?>

Z tym, że ja chcę pobrać z tabeli users, rekord z pozycji, gdzie users_id w tabeli users = planets_ownerid z tabeli planets. Proszę jednak o najbardziej zrozumiałą pomoc i możliwie najprosztszą podpowiedź, bo dopiero kilka dni temu zainteresowałem się programowaniem w PHP/SQL i nie chcę się zrazić, bo do tego momentu szło mi ciekawie

0

Praktycznie nie rozumiem o co pytasz, ale przypadkiem nie sqlowy join jest ci potrzebny?
https://www.w3schools.com/sql/sql_join.asp
Bys mógł wydobyć pole z tabeli X, gdy na celowniku masz tabelę Y

Niedyskretnie zasugeruję. Pocwicz MySQL w phpmyadmin - bo na zielonego łącząc dwie technologie w głowie będziesz miał momenty, że się zgubisz.
Prawdę mówiac dlatego pytanie jest mało zrozumiałe, nie skupiasz się na jednym.

0

@ZrobieDobrze: ma racje tu wystarczy join:

$sql = "SELECT users_username FROM planets p
inner join users u
on p.planets_ownerid = u.users_id
WHERE planets_galaxy = $testowanaGalaktyka AND planets_starsystem = $testowanySystem AND planets_planet = $testowanaPlaneta";

0

@ZrobieDobrze: Ćwiczę właśnie, tylko na tym się zatrzymałem. Na cba postawiłem sobie darmową domenę i tam mam phpMyAdmin i FTP. Próbuję zamiast "1" (identyfikator właściciela planety, który jest w tabeli "planets" w kolumnie "planets_ownerid") znaleźć w drugiej tabeli (users), kolumnę o tym identyfikatorze (planets_owner = users_id), żeby podmieni "1" na "Leopold", który znajduje się w tabeli "users" pod właśnie ID = 1. Nadal tego nie rozumiem i nadal mi nie działa. Pomimo, że przeczytałem i starałem się zrozumieć, nic z tego. Zielony jestem bardzo. Na YouTube też nie ogarniam tego INNER JOIN, czy OUTER, LEFT itd. Nie mogę połączyć dwóch tabel, bo każda w nazwie kolumny ma prefix właśnie po to, żeby był porządek, a z tego, co rozumiem, to obie tabele muszą mieć identycznie nazwaną kolumnę, żeby się połączyły. Nie da się jakoś prosto przez SQLa pobrać wartosci na przykład ID, zapamiętać w jednej zmiennej $costam a po tym otworzyc drugą tabelę w osobnym zapytaniu i szukać tą zmienną po ID? Przecież to chyba najprostsza opcja, tylko nie wiem, czemu mi nie działała jak próbowałem wykonać dwa takie pytania pod rząd.

image

@Panczo: Niestety pole w tabeli nadal jest puste. Jeśli zostawie skrypt w wersji pierwszej, jak pokazałem na początku, to w tabeli pokaże się ID gracza 1. To jest przechowywane w tabeli "planets" w kolumnie "planets_ownerid", a ja chcę teraz na podstawie tego zebranego ID "1" iść do drugiej tabeli (users) i stamtąd wyjąć users_username = Leopold, które jest pod identycznym ID = "1" ale w kolumnie users_id.

Wytłumaczcie mi proszę, bo już czułem wiatr we włosach aż do tego momentu...

Tak wyglądają moje tabele:
https://ibb.co/bdTQkxn
https://ibb.co/SBqbZsw

0

Teoria nie da mi wiele, bo już czytałem i oglądałem poradniki i po polsku i po angielsku i nadal nie rozumiem, jak wyciągnąć z tablicy ID i użyć go do szukania w innej. A podstawy jak widzisz ogarniam, bo wyciągnąłem z tabeli nazwę planety, księżyce itd.

Okej. Już otrzymałem prostą pomoc z zagranicznego forum :). Tak, czy tak dzięki za uwagę.

0
Shredie napisał(a):

...nadal nie rozumiem, jak wyciągnąć z tablicy ID i użyć go do szukania w innej. A podstawy jak widzisz ogarniam, bo wyciągnąłem z tabeli nazwę planety, księżyce itd.

Dostałeś wyżej odpowiedź, jak się zachowywać, aby zmienna nie była w ogóle potrzebna. Nie skorzystałeś.

Shredie napisał(a):

Teoria nie da mi wiele, bo już czytałem i oglądałem poradniki i po polsku i po angielsku

Słaba była ta teoria, że na słowo "join" nie trafiłeś
Niech zgadnę: jakieś pierdoły z YT, nagrywane przed gostka, który jest lepszy od ciebie o 3 miesiacie "skillu" ?

0

Po pierwsze nie zarejestrowałem się tu na forum, żeby mnie obrażano, bo mam prawo być zielony skoro dopiero zaczynam. Po drugie nie, kursy przygotowujące do egzaminów. Po trzecie natrafiłem na JOIN i go nie zrozumiałem. Po czwarte na zagranicznym forum przyjęto mnie z otwartymi rękami, uśmiechem i podano pomoc na srebrnej tacy tłumacząc dokładnie co oznacza co. Temat uważam za zamknięty, a odsyłanie do Google'a czy gdziekolwiek mija się z sensem istnienia forów. A, no i po piąte wytknięto mi kilka błędów w projektowaniu i bezpieczeństwie mojego produktu, choć nawet o to nie prosiłem. Ogromny kontrast między tym światem a tamtym. Dobrze, że umiem angielski

0

Sorki, ale nie muszę. Mów sobie co chcesz, ja tu już nie wbijam. Nie potrzebuję też tu odpisywać, więc miłego dnia tak czy tak. Prosiłbym moderatora o zamknięcie tematu czy nawet jego usunięcie, bo mało co wnosi oprócz JOIN a o wyjaśnieniu już nie wspomnę. Elóweczka, jadę dalej z tematem, bo mega mi to idzie. W końcu hah. Tyle lat mi się to marzyło, a teraz każdy kolejny niepewny krok zaczynam stawiać pewniej

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