Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]MYSQL ŁĄCZENIE TABEL
Forum PHP.pl > Forum > Przedszkole
Mientus0
Witam, posiadam baze danych mysql i w niej 2 tabele klany oraz members. Chciałbym z tych dwóch tabeli wyciągnąć wszystkie dane poprzez SELECT ale zupełnie nie wiem jak to zrobić. Do czego mi to potrzebne?
A no chce zrobić skrypt który będzie pokazywał
Nazwe klanu, Wlasciciela klanu, Zastępce klanu(wszystkich jacy są), użytkowników klanu, oraz punkty umiejętności klanu.

Tutaj tabela klany



A tutaj members

Tutaj kolumna clan odwołuję się do id klanu w tabeli klany. Natomiast flag to flaga, 3 - Wlasciciel, 2 - Zastępca, 1 - Członek

viking
https://www.edureka.co/blog/sql-joins-types
Mientus0
Efekt jest słaby wyświetla wartość NULL gdzie powinny być dane z drugiej tabeli czyli clan_members.

SELECT id, clans.name as clan_name, clan_members.name as member_name, members, kills, level, wins, health, dmg, weapon, clan, flag FROM `clans` LEFT JOIN `clan_members` on `clans.id = clan_members.clan'


nospor
Bo nie
on `clans.id = clan_members.clan'
a
on clans.id = clan_members.clan

I nie KRZYCZ
MYSQL ŁĄCZENIE TABEL

Glusi nie jestesmy
Mientus0
Przepraszam capslock.

Oki to działa tylko wpisy się dublują (nazwy klanu).

nospor
Zgadza sie. Jak masz wielu czlonkow w klanie, to logiczne ze rekordy dla klanu sie zdubluja tyle razy ilu masz czlonkow. Zas dane kazdego czlonka masz juz swoje.
Teraz ladnie to w php obrabiasz i wyswietlasz sobie piknie bez duplikacji
Mientus0
Czemu nie chce pobrać rekordów tzn nie wyświetla nic po wykonaniu result?

Kod
<html>
<head>
</head>
<body>
<style>
body {
    background-image: url(cod_bo.jpg);
    background-repeat: no-repeat;
    background-position: center;
    background-attachment: fixed;
    color: white;
    font-family: Verdana;
    padding: 25px;
    font-size: 90%;
}

h1 {
    text-align: center;
    color: #339966;
}

h3 {
    text-align: center;
    width: 40%;
    margin-left: 30%;
    margin-right: 30%;
    border-bottom: 0.25px solid #33CC99;
}

p {
    text-align: center;
    color: #CCCC66;
}</style>

<center>
<table bgcolor="">
    <tr><td><h3>Nazwa_klanu</h3></td></tr>
    <tr><td><h3>Wlasciciel</h3></td></tr>
    <tr><td><h3>Zastepca</h3></td></tr>
    <tr><td><h3>Czlonkowie<h3></td></tr>
</table>

<?php
// Create connection
$conn = new mysqli("172.39.236.240", "manager69610", "password", "manager69610");
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT id, clans.name as clan_name, clan_members.name as member_name, members, kills, level, wins, health, dmg, weapon, clan, flag FROM `clans` LEFT JOIN `clan_members` on clans.id = clan_members.clan WHERE clans.id = 2";
$result = $conn->query($sql);

if ($result) {
    $row = mysql_fetch_assoc($result, MYSQL_ASSOC);
   echo "<table><tr><td><p>" . $row["clan_name"]. "<p></td></tr></table>";
}
if(!$result){
    $conn->close();
    exit;
}

?>

</body>
</html>
nospor
sprawdziles co dokladnie zawiera $result? I jesli zawiera FALSE to sprawdziles blad jaki baza ci pluje?
Mientus0
Dodałem po ifie var_dump($result);

Oto wynik
Kod
object(mysqli_result)#2 (5) { ["current_field"]=> int(0) ["field_count"]=> int(12) ["lengths"]=> NULL ["num_rows"]=> int(4) ["type"]=> int(0) } Warning: mysql_fetch_assoc() expects parameter 1 to be resource, object given in /web1/web1/home/socham/778723/index.php on line 62
viking
Na górze masz połączenie po rozszerzeniu mysqli zaraz potem przychodzisz sobie na mysql. masz przecież w dokumentacji całe przykłady.
Mientus0
Dzięki, poprawiłem i działa i chciałem żeby wyświetlało to bespośrednio pod Nazwa_Klanu, ale wyświetla się to tak:

viking
Skoro już otwierasz tabelę to trzymaj się wierszy i poprawnie zamykaj elementy. W kodzie masz dwa razy otwarcie p.
Mientus0
Cytat(viking @ 24.03.2020, 18:09:20 ) *
Skoro już otwierasz tabelę to trzymaj się wierszy i poprawnie zamykaj elementy. W kodzie masz dwa razy otwarcie p.


Nic to nie zmieniło dalej w tym samym miejscu to jest.
viking
Ale czego oczekujesz? Wrzuciłeś jedną tabelę, zamknąłeś ja. Wrzuciłeś kolejną. Logiczne że wyświetli się pod spodem.
Mientus0
to jak mam to zrobić. nie zamknie tabeli rozpoczętej przed znacznikiem <?PHP bo błąd wywali
viking
Zapewne chcesz wstawić pobrane rekordy jako wierze pierwszej tabeli. Zrób w pętli echo samego tr.
Mientus0
Super działa biggrin.gif
Jeszcze jedno pytanie. Chce wybrać z tabeli wszystkich członków którzy mają flage = 2 jak to moge uczynić jakimś ifem się da ?

Kod
<?php
// Create connection
$conn = new mysqli("172.39.236.240", "manager69610", "password", "manager69610");
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT id, jbgang.name as clan_name, jbgang_members.name as member_name, members, kills, level, wins, health, dmg, weapon, clan, flag FROM `jbgang` LEFT JOIN `jbgang_members` on jbgang.id = jbgang_members.clan WHERE jbgang.id = 4";
$result = $conn->query($sql);

if ($result) {
   $row = mysqli_fetch_assoc($result);
    echo "<tr><td><br /><h1>" . $row["clan_name"]. "</h1></td></tr>    <tr><td><h3>Wlasciciel gangu</h3><p>" . $row["member_name"]. "</p></td></tr>    <tr><td><h3>Zastepca gangu</h3><p>" . $row["member_name"]. "</p></td></tr> <tr><td><h3>Czlonkowie gangu</h3><p>" . $row["member_name"]. "</p></td></tr>";
    
}
  $conn->close();
?>
viking
Ale na poziomie zapytania czy w kodzie? Jak zapytania to dodajesz kolejny warunek do where.
Mientus0
Wiesz w kodzie raczej bo muszę wypisać tak

Wlasciciel gangu: <- Flaga 3
Zastepcy gangu: <- Flaga 2
Czlonkowie gangu: <- Flaga 1
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.