Autor Zpráva
radekt
Profil
Dobrý den, pro zjištění počtu tabulek v databázi používám tento kód:
$dbname = 'mapa';
$pocet_tabulek=0;

$sql = "SHOW TABLES FROM $dbname";
$result = mysql_query($sql);

if (!$result) {
    echo "DB Error, could not list tables\n";
    echo 'MySQL Error: ' . mysql_error();
    exit;
}

while ($row = mysql_fetch_row($result)) {
    $pocet_tabulek++;
}

echo $pocet_tabulek;
mysql_free_result($result);

Funguje tak, jak má, ale nejde to i jinak - např. neumí to samo o sobě MySQL?
Joker
Profil
radekt:
Počet tabulek v databázi:
SELECT count(*) from information_schema.tables WHERE table_schema = 'název databáze';

Poznámky:
- mysql_* funkce jsou zastaralé (resp. celé MySQL rozšíření) a budou z PHP odebrány, nahraďte je alternativami (mysqli nebo PDO_MYSQL).
- Toto je informace, kterou typická aplikace ke svému běhu prakticky nikdy nepotřebuje, ostatně u typické aplikace by to mělo být pevně dané číslo (výsledkem běhu normální aplikace může být přidávání/změna/mazání záznamů v tabulkách, ale ne přidávání či mazání databázových tabulek).
Potřeba něco takového zjišťovat je častý příznak chyby v návrhu databáze (jedna věc co mě napadá kde by to mělo smysl je třeba v instalátoru aplikace ověřování, že se vytvořily všechny tabulky, i když tam by mělo větší smysl kontrolovat existenci každé konkrétní tabulky).
blaaablaaa
Profil
SELECT COUNT(1) FROM information_schema.tables WHERE table_schema = 'mapa';
//Joker byl rychlejsi ;)
radekt
Profil
Vynikající, zase vím o něco víc. Jedno jsem ale nedomyslel: jak počet tabulek dostanu do proměnné php? Nemůžu použít původní způsob, protože ten by vrátil hodnotu 1 a nikoli počet tabulek v databázi.
Joker
Profil
radekt:
jak počet tabulek dostanu do proměnné php?
Stejně jako kamkoliv jinam: Načtete si první sloupec toho co to vrátí.
lorin
Profil
Myslím že to jde takhle:

echo $vysledek[0];
// nebo
echo $vysledek["count(*)"];

Byť přiznávám že tím druhým způsobem si nejsem moc jistý.
radekt
Profil
hotovo:
$query = "SELECT count( * ) AS poc_tbl
FROM information_schema.tables
WHERE table_schema = 'mapa'";

$result = mysql_query($query) or die ("SQL dotaz query_detail nešlo provést");
while ($row = mysql_fetch_array($result)) {
    echo $row["poc_tbl"];
}

K tomu mysqli nebo PDO_MYSQL - ví se, co je perspektivnější (abych např. nepředělal vše na mysqli a to se pak také odebralo)?
Joker
Profil
radekt:
Jde to jednodušeji:
$query = "SELECT count( * ) FROM information_schema.tables WHERE table_schema = 'mapa'";
$result = mysql_query($query) or die ("SQL dotaz query_detail nešlo provést");
$row = mysql_fetch_row($result);
// while cyklus je zbytečný, výsledkem je jen jedno číslo
$pocet = $row[0];

Ale raději ještě jednou připomínám, že je dost zvláštní, že ta aplikace vůbec něco takového potřebuje.
radekt
Profil
Děkuji moc. Aplikace sama to nepotřebuje, ale mám nějaké říkání o jejím vývoji, kde se mimo jiné zmiňuji i o počtu tabulek, tak jsem to nechtěl mít ve statickém textu, když nové tabulky přibudou, abych to nemusel hlídat.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: