Wyświetlanie listy tabel w bazie danych

0

Witam! Aktualnei piszę prosty serwis społecznościowy, gdyz jestesm stosunkowo początkujący i chcę teraz sukcesywnie zdobywać nową wiedzę i ją wykorzystywać. ;) Problem pojawił się przy wyświetlaniu listy nazw wszystkich table jakie mam w bazie danych. Potrzebuję tego przy jednym z warunków w skrypcie zapraszania. Próbuje wykorzystać zapytanie w mysql "show tables" lecz wyświetla mi tylko nazwę pierwszej tabeli... :/ Co robię źle? Oto kod odpowiadający za pobieranie tych nazw oraz ich wyświetlanie:

$res = mysql_query("SHOW TABLES ") or die(mysql_error());

        $r = mysql_fetch_assoc($res);
        foreach($r as $tmp)
        {
            echo "$tmp <br>";
        }

Na nazwy zmiennych proszę nie zwracać uwagi, kod jest zrobiony tymczasowo w miejscu gdzie jego wyświetlanie będzie wygodne.
Proszę o pomoc i porady oraz pozdrawiam! ☺

0
while($table = mysql_fetch_array($res)) {
    echo $table[0] . "<br>";
}
0

Dlaczego potrzebujesz znać listę tabel?
Brzmi jak źle zaprojektowana architektura.

0
Patryk27 napisał(a):

Dlaczego potrzebujesz znać listę tabel?
Brzmi jak źle zaprojektowana architektura.

Dlaczego zła architektura? Jak już piszesz to podaj powód/powody dlaczego tak a nie człowiek ma się domyślać xD

1

Dlaczego zła architektura? Jak już piszesz to podaj powód/powody dlaczego tak a nie człowiek ma się domyślać xD

Ależ proszę ;-)

Załóżmy następującą sytuację: mamy aplikację, w której dane każdego użytkownika trzymamy w osobnych tabelach (czyli mamy tabele uzytkownik_foo, uzytkownik_bar, uzytkownik_zar etc.) - w przeciwieństwie to podejścia klasycznego, czyli jednej tabeli (uzytkownicy).

Taki nie-klasyczny (wielotabelowy) design ma wiele problemów, a mianowicie:

  • nie da się przeprowadzić JOINów (ponieważ nazwa tabeli nie może być w zapytaniu budowana dynamicznie),
  • nie da się stworzyć kluczy obcych z innych tabel do tabel użytkowników (ponieważ jest wiele tabel użytkowników, a nie jedna),
  • nie da się stworzyć zapytania wyszukującego użytkowników (ponownie: ponieważ jest wiele tabel, a nazwa tabeli w zapytaniu nie może być budowana dynamicznie),
  • użytkownik bazy danych, na którym działa aplikacja, musi mieć możliwość tworzenia tabel (oraz, opcjonalnie, ich usuwania), co może stanowić zagrożenie z punktu widzenia bezpieczeństwa,
  • dane ułożone w taki sposób (rozsiane po tabelach) zajmują więcej miejsca (mamy wtedy do czynienia z sytuacją, w której rozmiar bazy = n * (rozmiar tabeli + rozmiar wiersza), zamiast rozmiar tabeli + n * rozmiar wiersza),
  • na dyskach talerzowych operacje tworzenia oraz usuwania tabel są okropnie wolne, w porównaniu do operacji na samych wierszach,
  • niektóre hostingi mają limit na liczbę tabel.

Taki nie-klasyczny (wielotabelowy) design ma też wiele zalet, a miano... czej, ja to ani jednej nie widzę :-)

Wniosek: jedna tabela (uzytkownicy) jest lepsza niż wiele (uzytkownik_foo, uzytkownik_bar, ...).

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0