Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] SELECT id, fld, tableB_name, (SELECT count(*) FROM tableB_name) AS count FROM tableA
jol.us_
post 14.04.2021, 13:18:50
Post #1





Grupa: Zarejestrowani
Postów: 132
Pomógł: 0
Dołączył: 10.12.2003
Skąd: Kraków

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


Witam,

Chciałbym wykonać zliczanie rekordów za pomocą jednego zapytania, gdzie:
- pobieram rekordy z Tabeli A
- zliczam rekordy w Tabeli B, gdzie nazwa Tabeli B jest zawarta w rekordzie kolumny Tabeli A

Coś na zasadzie:

  1. SELECT id, fld, tableB_name, (SELECT count(*) FROM tableB_name) AS count FROM tableA


Czyli w TableA, w kolumnie tableB_name przechowuje nazwę tabeli, której potem używam przy zliczaniu.

Oczywiście powyższe zapytanie generuje błąd.
Czy jest w ogóle opcja aby coś takiego wykonać w jednym zapytaniu, bez wrzucania zliczania wewnątrz pętli na podstawie pobranego rekordu?

Ten post edytował jol.us_ 14.04.2021, 13:24:38


--------------------
run Forest run ...
Go to the top of the page
+Quote Post
vokiel
post 15.04.2021, 00:10:45
Post #2





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

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


Zwykły JOIN powinien załatwić sprawę.


--------------------
Go to the top of the page
+Quote Post
trueblue
post 15.04.2021, 08:18:29
Post #3





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Nie jest to możliwe w jednym zapytaniu.
Jeśli przechowujesz nazwy tabel jako wartości kolumny w innej tabeli, to być może jest coś nie tak ze strukturą bazy. Domyślam się, że każda z tych tabel ma taką samą strukturę, a zostały podzielone na odrębne ze względu na jakieś archiwizowanie danych w określonych odstępach czasu.

Możliwe jest jedno zapytanie, ale wygenerowane w PHP:
- pobranie nazw tabel,
- wygenerowanie jednego zapytania opartego o UNION i pobrane nazwy tabel.


--------------------
Go to the top of the page
+Quote Post
jol.us_
post 15.04.2021, 09:50:53
Post #4





Grupa: Zarejestrowani
Postów: 132
Pomógł: 0
Dołączył: 10.12.2003
Skąd: Kraków

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


Cytat(trueblue @ 15.04.2021, 09:18:29 ) *
Nie jest to możliwe w jednym zapytaniu.
Jeśli przechowujesz nazwy tabel jako wartości kolumny w innej tabeli, to być może jest coś nie tak ze strukturą bazy. Domyślam się, że każda z tych tabel ma taką samą strukturę, a zostały podzielone na odrębne ze względu na jakieś archiwizowanie danych w określonych odstępach czasu.

Możliwe jest jedno zapytanie, ale wygenerowane w PHP:
- pobranie nazw tabel,
- wygenerowanie jednego zapytania opartego o UNION i pobrane nazwy tabel.


Tak też myślałem, że to niemożliwe.

Struktura może jest dziwna, ale raczej prawidłowa. Po prostu dynamicznie tworzę/usuwam table bazy danych o różnych strukturach, a listę tych tabel wraz z ich właściwościami i innymi informacjami trzymam w oddzielnej tabeli. To wynika ze specyfiki projektu i tego, że nie mogę trzymać wszystkich rekordów w obrębie jednej tabeli i wiązać jej np. z kluczem obcym umieszczonym w kolumnie. W tym przypadku rekordy są rozdzielane na różne tabele, a kluczem obcym jest po prorstu nazwa tabeli.

Ten post edytował jol.us_ 15.04.2021, 09:56:14


--------------------
run Forest run ...
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 24.04.2024 - 22:27