Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [PHP][MySQL]MYSQL ŁĄCZENIE TABEL

Napisany przez: Mientus0 23.03.2020, 13:09:28

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


Napisany przez: viking 23.03.2020, 13:29:07

https://www.edureka.co/blog/sql-joins-types

Napisany przez: Mientus0 23.03.2020, 13:47:57

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'



Napisany przez: nospor 23.03.2020, 13:57:19

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

I nie KRZYCZ
MYSQL ŁĄCZENIE TABEL

Glusi nie jestesmy

Napisany przez: Mientus0 23.03.2020, 14:20:26

Przepraszam capslock.

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


Napisany przez: nospor 23.03.2020, 14:31:26

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

Napisany przez: Mientus0 24.03.2020, 16:22:00

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>

Napisany przez: nospor 24.03.2020, 16:28:25

sprawdziles co dokladnie zawiera $result? I jesli zawiera FALSE to sprawdziles blad jaki baza ci pluje?

Napisany przez: Mientus0 24.03.2020, 17:36:28

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

Napisany przez: viking 24.03.2020, 17:41:09

Na górze masz połączenie po rozszerzeniu mysqli zaraz potem przychodzisz sobie na mysql. masz przecież w dokumentacji całe przykłady.

Napisany przez: Mientus0 24.03.2020, 17:44:41

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:


Napisany przez: 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.

Napisany przez: Mientus0 24.03.2020, 18:11:45

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.

Napisany przez: viking 24.03.2020, 18:18:23

Ale czego oczekujesz? Wrzuciłeś jedną tabelę, zamknąłeś ja. Wrzuciłeś kolejną. Logiczne że wyświetli się pod spodem.

Napisany przez: Mientus0 24.03.2020, 18:26:45

to jak mam to zrobić. nie zamknie tabeli rozpoczętej przed znacznikiem <?PHP bo błąd wywali

Napisany przez: viking 24.03.2020, 18:30:19

Zapewne chcesz wstawić pobrane rekordy jako wierze pierwszej tabeli. Zrób w pętli echo samego tr.

Napisany przez: Mientus0 24.03.2020, 18:43:36

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();
?>

Napisany przez: viking 24.03.2020, 18:47:35

Ale na poziomie zapytania czy w kodzie? Jak zapytania to dodajesz kolejny warunek do where.

Napisany przez: Mientus0 24.03.2020, 18:49:28

Wiesz w kodzie raczej bo muszę wypisać tak

Wlasciciel gangu: <- Flaga 3
Zastepcy gangu: <- Flaga 2
Czlonkowie gangu: <- Flaga 1

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)