Diskuze: MySQL tabulka
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é.
Hando:7.10.2016 23:08
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...
Jan Kubáč:7.10.2016 23:17
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>
Hando:7.10.2016 23:31
"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.
Jan Kubáč:7.10.2016 23:59
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
Hando:8.10.2016 2:16
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í.
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
<br>
1. tabulka "ranks"
steamId | points | lastDisplayName | lastUpdated |
- | - | - | - |
<br>
2. tabulka "ranksrussia2"
steamId | points | lastDisplayName | lastUpdated |
- | - | - | - |
<br>
3. tabulka "uconomy"
steamId | balance | lastUpdated |
- | - | - |
<br>
<br>
A chtěl bych je dát dohromady
steamId | points | lastDisplayName | lastUpdated | points | balance |
- | - | - | - | - | - |
Neaktivní uživatel:8.10.2016 12:13
<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 .
+20 Zkušeností
+2,50 Kč
Neaktivní uživatel:8.10.2016 13:31
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)
Zobrazeno 11 zpráv z 11.