Avatar
Jan Kubáč
Člen
Avatar
Jan Kubáč:

Zdravím, poradil by mi někdo jak na tabulku vypsanou z MySQLu? V mysql databázi mám 3 tabulky a z každé bych chtěl jednu hodnotu zobrazit na webu v jednom řádku/tabulce. Jestli je to vůbec možné.

MySQL podrobněji:

  1. tabulka "ranks" ve které jsou sloupce: "steamId", "points", "lastUpdateName"
  2. tabulka "ranks2" ve které je sloupec: "points"
  3. tabulka "uconomy" ve které je sloupec: "balance"
steamID lastUpdateName points points balance
- - - - -

tabulku mám momentálně takhle:

<div class="content-loader">

<table cellspacing="0" width="100%" id="rank2" class="table table-striped table-hover table-responsive">
<thead>
<tr>
<th>steamId</th>
<th>points</th>
<th>lastDisplayName</th>
<th>lastUpdated</th>
</tr>
</thead>
<tbody>
<?php
require_once 'dbconfig.php';
$steamId = $_SESSION['steamId'];
$steamprofile['steamid'] = $_SESSION['steam_steamid'];
$stmt = $db_con->prepare("SELECT `steamId`, `points`, `lastDisplayName`, `lastUpdated`
FROM `ranksrussia2` WHERE `steamId` = ?");
$stmt->execute(array($steamprofile['steamid']));
$stmt->execute();
        while($row=$stmt->fetch(PDO::FETCH_ASSOC))
        {
                ?>
                <tr>
                <td><?php echo $row['steamId']; ?></td>
                <td><?php echo $row['points']; ?></td>
                <td><?php echo $row['lastDisplayName']; ?></td>
                <td><?php echo $row['lastUpdated']; ?></td>
                </tr>
                <?php
        }
        ?>
</tbody>
</table>

</div>
 
Odpovědět 7. října 22:26
Avatar
Hando
Člen
Avatar
Hando:

Ahoj.

SELECT `steamId`, `points`, `lastDisplayName`, `lastUpdated`
FROM `ranksrussia2` WHERE `steamId` = ?

Vždyť tady taháš data jen z jedné tabulky, která navíc chybí v tvém výčtu tabulek. Nemotáš dohromady tabulky a databázi? Jsou ty tabulky nějak propojené?
Jinak samozřejmě výpis ze tří tabulek není takový problém, buďto třeba '... FROM table1, table2 (atd.)', nebo pomocí JOIN, pokud jsou nějak propojené.

 
Nahoru Odpovědět 7. října 23:00
Avatar
Hando
Člen
Avatar
Odpovídá na Jan Kubáč
Hando:

Doplněno (nemůžu už upravit předchozí příspěvek :( )


Nyní vidím, že používáš kód, který ti někdo napsal ve vlákně zobrazeni-mysql-databaze-pres-steamid, ale zřejmě práci s databází teprve poznáváš. Doporučuji se podívat na nějaký tutorial, třeba ten zdejší: MySQL, jinak budeš při každém dotazu jen hádat, co se to vlastně děje...

Editováno 7. října 23:09
 
Nahoru Odpovědět 7. října 23:08
Avatar
Jan Kubáč
Člen
Avatar
Odpovídá na Hando
Jan Kubáč:

neznám to správné pojmenování v phpmyadmin je název Tabulek "ranks", "ranks2" a "uconomy" a všechny jsou v jedné databázi.

Zkoušel jsem, ale timto se nezobrazí vůbec nic

<div class="content-loader">

<table cellspacing="0" width="100%" id="rank2" class="table table-striped table-hover table-responsive">
<thead>
<tr>
<th>steamId</th>
<th>points</th>
<th>lastDisplayName</th>
<th>lastUpdated</th>
<th>balance</th>
</tr>
</thead>
<tbody>
<?php
require_once 'dbconfig.php';
$steamId = $_SESSION['steamId'];
$steamprofile['steamid'] = $_SESSION['steam_steamid'];
$stmt = $db_con->prepare("SELECT `steamId`, `points`, `lastDisplayName`, `lastUpdated`
FROM `ranksrussia2, uconomy` WHERE `steamId` = ?");
$stmt->execute(array($steamprofile['steamid']));
$stmt->execute();
        while($row=$stmt->fetch(PDO::FETCH_ASSOC))
        {
                ?>
                <tr>
                <td><?php echo $row['steamId']; ?></td>
                <td><?php echo $row['points']; ?></td>
                <td><?php echo $row['lastDisplayName']; ?></td>
                <td><?php echo $row['lastUpdated']; ?></td>
                <td><?php echo $row['balance']; ?></td>
                </tr>
                <?php
        }
        ?>

</tbody>
</table>

</div>
 
Nahoru Odpovědět 7. října 23:17
Avatar
Hando
Člen
Avatar
Odpovídá na Jan Kubáč
Hando:

"ranks", "ranks2" a "uconomy" a všechny jsou v jedné databázi

MySQL podrobněji:

tabulka "ranks" ve které jsou sloupce: "steamId", "points", "lastUpdateName"
tabulka "ranks2" ve které je sloupec: "points"
tabulka "uconomy" ve které je sloupec: "balance"

"SELECT `steamId`, `points`, `lastDisplayName`, `lastUpdated`
FROM `ranksrussia2, uconomy` WHERE `steamId` = ?"

A kde máš tabulku 'ranksrussia2'? Navíc pokud používáš WHERE klauzuli, musíš specifikovat, ke které tabulce z from (pokud jich je víc než jedna) patří.

Mimochodem, pokud má jeden vypsaný řádek na té tvé stránce reprezentovat údaje k jednomu hráči (což hádám ze SteamID), tak bys měl těm tabulkám nějak říct, které řádky patří k sobě. Pokud tedy netajíš něco ve svém výpisu "MySQL podrobněji". :)

Zkoušej si ty dotazy přímo v PHPMyAdminu, nebo Admineru (nevím, co používáš), jakmile ti budou fungovat, tak je převeď do php - ušetříš si práci hledáním chyby ve dvou kódech naráz.

 
Nahoru Odpovědět 7. října 23:31
Avatar
Jan Kubáč
Člen
Avatar
Odpovídá na Hando
Jan Kubáč:

tabulku ranksrussia2 jsem uvedl jen jako příklad, pouze jsem spletl názvy, nejde o názvy ale o funkci kterou mám použít snad ne.

WHERE steamId - "steamId" mám obsažené v každé tabulce

 
Nahoru Odpovědět 7. října 23:59
Avatar
Hando
Člen
Avatar
Odpovídá na Jan Kubáč
Hando:

Takže když spustíš samotný dotaz na databázi přímo v konzoli PHPMyAdminu, tak ti to vrátí kloudný výsledek? To je potřeba dát prvně do pořádku.

WHERE steamId - "steamId" mám obsažené v každé tabulce

Jestli máš steamId v každé tabulce a odpovídají si, tak je můžeš lehce propojit pomocí JOIN. Ale uvádíš částečné informace, to je věštění z křišťálové koule. S tím hodně štěstí. :)

 
Nahoru Odpovědět 8. října 2:16
Avatar
Jan Kubáč
Člen
Avatar
Jan Kubáč:

Dotaz v databázi? nevím co bych tam měl zkoušet. Přímo na webu to funguje

Co je ještě potřeba uvést? Mám tři tabulky

1. tabulka "ranks"

steamId points lastDisplayName lastUpdated
- - - -



2. tabulka "ranksrussia2"

steamId points lastDisplayName lastUpdated
- - - -



3. tabulka "uconomy"

steamId balance lastUpdated
- - -





A chtěl bych je dát dohromady

steamId points lastDisplayName lastUpdated points balance
- - - - - -
 
Nahoru Odpovědět 8. října 11:38
Avatar
Petr Linhart
Člen
Avatar
Odpovídá na Jan Kubáč
Petr Linhart:
<div class="content-loader">

        <table cellspacing="0" width="100%" id="rank2" class="table table-striped table-hover table-responsive">
                <thead>
                <tr>
                        <th>steamId</th>
                        <th>points (ranks)</th>
                        <th>lastDisplayName</th>
                        <th>lastUpdated</th>
                        <th>points (ranks2)</th>
                        <th>balance</th>
                </tr>
                </thead>
                <tbody>
                <?php
                require_once 'dbconfig.php';
                /**
                 * $steamId = $_SESSION['steamId']; zbytečné, zbylo z pokusů
                 * $steamprofile['steamid'] = $_SESSION['steamId']; tohle je v includovaném souboru
                 */
                $stmt = $db_con->prepare("SELECT ranks.id, ranks.steamId, ranks.points, ranks.lastDisplayName, ranks.lastUpdated, ranks2.points AS points2, uconomy.balance
                        FROM ranks
                        INNER JOIN ranks2 ON ranks.steamId = ranks2.steamID
                        LEFT JOIN uconomy ON ranks.steamId = uconomy.steamId
                        WHERE ranks.steamId = ?");
                $stmt->execute(array($steamprofile['steamid']));
                // $stmt->execute(); tohle je navíc, máš to o řádek výš
                                while($row=$stmt->fetch(PDO::FETCH_ASSOC))
                                {
                                        echo "<td>". $row['steamId']."</td><td>". $row['points'] ."</td><td>". $row['lastDisplayName'] ."</td><td>". $row['lastUpdated'] ."</td><td>". $row['points2'] ."</td><td>". $row['balance'] ."</td>";
                                }
                                ?>

                </tbody>
        </table>
</div>

Odstraň ty zbytečné řádky co sis tam nakopíroval minule. A uprav dotaz na db tak aby spojila tabulky na základě steamId.
Hando ti dobře radil, aby sis prošel výukové lekce k Mysql a Databáze v PHP pro začátečníky .

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 8. října 12:13
Avatar
Jan Kubáč
Člen
Avatar
Jan Kubáč:

jestli se mohu ještě zeptat, co znamená to ranks.id v SELECTu? Když to vynechám vše funguje. A teď kdybych chtěl přidat další tabulku, stačí funkce LEFT JOIN jestli to chápu správně? Děkuji

 
Nahoru Odpovědět 8. října 12:59
Avatar
Petr Linhart
Člen
Avatar
Odpovídá na Jan Kubáč
Petr Linhart:

ranks.id vybírat nemusíš, dotaz na něm není závislý, jedná se jen o sloupec v tabulce ranks sloužící jako primární klíč.

Na dotaz přes více tabulek slouží klauzule JOIN. Ta má ale více podob a je potřeba zvolit tu správnou podle potřeby a závislostí dat v tabulkách.
Existují:
INNER JOIN (často psáno jen JOIN)
LEFT JOIN (nebo LEFT OUTER JOIN)
RIGHT JOIN (nebo RIGHT OUTER JOIN)
FULL OUTER JOIN

Vysvětlení najdeš v článku 7. díl - MySQL krok za krokem: Dotazy přes více tabulek (JOIN)

 
Nahoru Odpovědět 8. října 13:31
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.