Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][php] Select z kilku takich samych tabel
harbii
post
Post #1





Grupa: Zarejestrowani
Postów: 311
Pomógł: 1
Dołączył: 27.05.2006

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
amii
post
Post #2





Grupa: Zarejestrowani
Postów: 728
Pomógł: 76
Dołączył: 12.06.2009

Ostrzeżenie: (0%)
-----


$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ć
Go to the top of the page
+Quote Post
erix
post
Post #3





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




UNION?
Go to the top of the page
+Quote Post
harbii
post
Post #4





Grupa: Zarejestrowani
Postów: 311
Pomógł: 1
Dołączył: 27.05.2006

Ostrzeżenie: (0%)
-----


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"
Go to the top of the page
+Quote Post
bastard13
post
Post #5





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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. }


Ten post edytował bastard13 9.01.2010, 21:26:32
Go to the top of the page
+Quote Post
celbarowicz
post
Post #6





Grupa: Zarejestrowani
Postów: 253
Pomógł: 31
Dołączył: 30.03.2009
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


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ę.
Go to the top of the page
+Quote Post
erix
post
Post #7





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




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...
Go to the top of the page
+Quote Post
harbii
post
Post #8





Grupa: Zarejestrowani
Postów: 311
Pomógł: 1
Dołączył: 27.05.2006

Ostrzeżenie: (0%)
-----


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ę(IMG:style_emoticons/default/questionmark.gif)

Bo jak się mylę to nie ma tematu.

Ten post edytował harbii 11.01.2010, 21:18:49
Go to the top of the page
+Quote Post
bastard13
post
Post #9





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
harbii
post
Post #10





Grupa: Zarejestrowani
Postów: 311
Pomógł: 1
Dołączył: 27.05.2006

Ostrzeżenie: (0%)
-----


bastard13
ok (IMG:style_emoticons/default/dry.gif)
Przekonałeś mnie,może faktycznie martwię się na wyrost.

dzięki za pdp
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.09.2025 - 03:06