Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][php] Select z kilku takich samych tabel
Forum PHP.pl > Forum > Przedszkole
harbii
Mam tabele:
2008dok
2009dok
2010dok

Zawierają te same pola.

Jak napisać selecta aby odczytał ze wszystkich powyższych tabel?
Chodzi o coś w stylu:
  1. SELECT * FROM *dok
amii
$tablica = array('2008', '2009', '2010');

for ($i=0; $i<count($tablica); $i++) {
$sql = "SELECT * FROM '$tablica[$i]'.dok";
}

Sprawdź składnię zapytania bo może się nie zgadzać
erix
UNION?
harbii
amii ok ale tu musimy znać początek nazwy (a w sumie to już całą nazwę) tabel a mi chodzi o coś w stylu *

może inny przykład:
edqwqadok
112312dok
csd32deefdok
...
i ma odczytać wszystkie tabele w bazie które kończą się na "dok"
bastard13
Z tego co kojarze to się nie da tego zrobić normalnym zapytaniem, ale mogę się mylić.
Musiałoby to być coś podobnego do REGEXP tyle, że to nie działa w miejscu wpisywania tablic, a nic innego mi nie przychodzi do głowy.
Za pomocą kodu php możesz to robić w ten sposób:
  1. $zapytanie='show tables;';
  2. $wynik = $db->query($zapytanie); //pobierasz wszystkie tabele
  3. while($wiersz = $wynik->fetch_assoc())
  4. {
  5. //tutaj możesz wrzucić ewentualnie jakiś kod sprawdzający czy dana nazwa tabeli pasuje do wzoru
  6. $zapytanie='select * from '.$wiersz['Tables_in_nazwa_bazy'].';';
  7. $wynik2 = $db->query($zapytanie); //pobierasz wszystkie dane z danej tabeli
  8. echo '<br /><br />TABLICA '.$wiersz['Tables_in_nazwa_bazy'].':<br />';
  9. while($wiersz2 = $wynik2->fetch_assoc())
  10. { echo '<br />';
  11. foreach ($wiersz2 as $klucz => $wartosc)
  12. { echo $klucz.' -> '.$wartosc.'---'; }
  13. }
  14. }
celbarowicz
zrób pętlę wewnętrzną w której odczytasz dane z pierwszej tabeli, a następnie pętla zewnętrzna zmieni numer tabeli i odczytasz następną tabelę.
erix
Cytat
i ma odczytać wszystkie tabele w bazie które kończą się na "dok"

Skoro są to tabele o takiej samej strukturze, to dlaczego nie trzymasz danych w jednej różnicując je przez inny warunek? Trochę to dziwne rozwiązanie...
harbii
erix
bo z tego co doczytałem to baza ma ograniczoną ilość danych więc po 10 latach może się nie zmieścić oraz chyba długo będzie trwało przeszukanie takiej bazy.

czy się mylęquestionmark.gif

Bo jak się mylę to nie ma tematu.
bastard13
http://dev.mysql.com/doc/refman/5.0/en/full-table.html
To na temat wielkości bazy. 2T chyba Ci na razie wystarczy:) A za 10 lat z pewnością ich wielkość się zwiększy. Co do przeszukiwania, jeżeli będziesz miał wszystko w jednej bazie to robisz tylko zapytanie do bazy i wyświetlenie danego wyniku. Jeżeli to podzielisz na parę baz to będziesz musiał dorzucić do kodu, przed wysłaniem zapytania, jakieś sprawdzenie, żeby wiedzieć, w której bazie masz szukać.
Które zadziała szybciej? To już zależy od wielkości bazy.
harbii
bastard13
ok dry.gif
Przekonałeś mnie,może faktycznie martwię się na wyrost.

dzięki za pdp
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.