[MySQL]: Dodanie zliczania =?ISO-8859-2?Q?rekord=F3w_do_rozb?==?ISO-8859-2?Q?udowanego_zapytania?=
Krzysztof Szatanik - 26-05-2006 01:43
[MySQL]: Dodanie zliczania =?ISO-8859-2?Q?rekord=F3w_do_rozb?==?ISO-8859-2?Q?udowanego_zapytania?=
Witam
Mam dość rozbudowane zapytanie SQL pobierające dane z 2 tablic (plus jeszcze LEFT JOIN):
SELECT a.a_id, a.ac_id, p.ac_name AS maincat, p.ac_id AS maincat_id, p.ac_seo AS maincat_seo, c.ac_name AS subcat, c.ac_id AS subcat_id, c.ac_seo AS subcat_seo, a.title, a.seo, a.intro, a.img, a.access, a.uid, a.views, a.date, c.ac_name, c.ac_seo, c.ac_img FROM gfc_articles AS a, gfc_articles_categories AS c LEFT JOIN gfc_articles_categories AS p ON c.ac_parent=p.ac_id WHERE a.ac_id=c.ac_id ORDER BY a.date DESC LIMIT 0, 20 ;
Zapytanie pobiera listę artykułów z tabeli gfc_articles, oraz szczegóły odpowiadającej jej kategorii (c - gfc_articles_category WHERE a.ac_id=c.ac_id) , oraz poprzez LEFT JOIN szczegóły nadrzędnej kategorii (jeśli taka jest) p - gfc_articles_categories ON c.ac_parent=p.ac_id. Pomimo że pewnie nie jest optymalne to jednak jakoś działa. Problem w tym, że do tego zapytania chciałbym jeszcze dodać pobieranie ilośći komentarzy z jeszcze jednej tabeli gfc_articles_remarks. Normalne zapytanie jest proste i wygląda następująco:
select a.a_id, a.title, count(r.a_id) AS komentarzy FROM gfc_articles AS a LEFT JOIN gfc_articles_remarks AS r ON r.a_id=a.a_id GROUP BY a.a_id
Jednakże próba połączenia tego w jedno zapytanie:
SELECT a.a_id, COUNT(r.a_id) AS komentarzy, a.ac_id, p.ac_name AS maincat, p.ac_id AS maincat_id, p.ac_seo AS maincat_seo, c.ac_name AS subcat, c.ac_id AS subcat_id, c.ac_seo AS subcat_seo, a.title, a.seo, a.intro, a.img, a.access, a.uid, a.views, a.date, c.ac_name, c.ac_seo, c.ac_img FROM gfc_articles AS a, gfc_articles_categories AS c LEFT JOIN gfc_articles_remarks AS r ON a.a_id=r.a_id LEFT JOIN gfc_articles_categories AS p ON c.ac_parent=p.ac_id WHERE a.ac_id=c.ac_id GROUP BY a.a_id ORDER BY date DESC LIMIT 0, 20 ;
Zwraca błąd:
ERROR 1054 (42S22): Unknown column 'a.a_id' in 'on clause'
(błąd odnosi się do klauzuli ON a.a_id=r.a_id przy LEFT JOIN gfc_articles_remarks)
Struktury tabel znajdują się na http://phpfi.com/119875
Moje pytanie: czy da się połączyć jakoś te zapytania lub uzyskać zbliżony efekt jednym zapytaniem?
Za wszelką pomoc i zainteresowanie z góry dziękuję
-- Z pozdrowieniami, Krzysztof Szatanik.
[ -->> Diabl0 <<-of->> MAO Group <<-- ] [-*> dbl001.wytnij.to@aby.doszlo.o2.pl GG: 2236900 <*--] [_-> www.xw-com.mao.pl - www.mao.pl - www.dziwnow.pl <-__]
Artur Gancarz - 07-07-2006 02:22
Użytkownik Krzysztof Szatanik napisał:
> Witam > > Mam dość rozbudowane zapytanie SQL pobierające dane z 2 tablic (plus > jeszcze LEFT JOIN): > > SELECT a.a_id, a.ac_id, p.ac_name AS maincat, p.ac_id AS maincat_id, > p.ac_seo AS maincat_seo, c.ac_name AS subcat, c.ac_id AS subcat_id, > c.ac_seo AS subcat_seo, a.title, a.seo, a.intro, a.img, a.access, a.uid, > a.views, a.date, c.ac_name, c.ac_seo, c.ac_img > FROM gfc_articles AS a, gfc_articles_categories AS c > LEFT JOIN gfc_articles_categories AS p ON c.ac_parent=p.ac_id > WHERE a.ac_id=c.ac_id > ORDER BY a.date DESC > LIMIT 0, 20 ; > > Zapytanie pobiera listę artykułów z tabeli gfc_articles, oraz szczegóły > odpowiadającej jej kategorii (c - gfc_articles_category WHERE > a.ac_id=c.ac_id) , oraz poprzez LEFT JOIN szczegóły nadrzędnej kategorii > (jeśli taka jest) p - gfc_articles_categories ON c.ac_parent=p.ac_id. > Pomimo że pewnie nie jest optymalne to jednak jakoś działa. Problem w > tym, że do tego zapytania chciałbym jeszcze dodać pobieranie ilośći > komentarzy z jeszcze jednej tabeli gfc_articles_remarks. Normalne > zapytanie jest proste i wygląda następująco: > > select a.a_id, a.title, count(r.a_id) AS komentarzy FROM gfc_articles AS > a LEFT JOIN gfc_articles_remarks AS r ON r.a_id=a.a_id GROUP BY a.a_id > > Jednakże próba połączenia tego w jedno zapytanie: > > SELECT a.a_id, COUNT(r.a_id) AS komentarzy, a.ac_id, p.ac_name AS > maincat, p.ac_id AS maincat_id, p.ac_seo AS maincat_seo, c.ac_name AS > subcat, c.ac_id AS subcat_id, c.ac_seo AS subcat_seo, a.title, a.seo, > a.intro, a.img, a.access, a.uid, a.views, a.date, c.ac_name, c.ac_seo, > c.ac_img > FROM gfc_articles AS a, gfc_articles_categories AS c > LEFT JOIN gfc_articles_remarks AS r ON a.a_id=r.a_id > LEFT JOIN gfc_articles_categories AS p ON c.ac_parent=p.ac_id > WHERE a.ac_id=c.ac_id > GROUP BY a.a_id > ORDER BY date DESC > LIMIT 0, 20 ; > > Zwraca błąd: > > ERROR 1054 (42S22): Unknown column 'a.a_id' in 'on clause' > > (błąd odnosi się do klauzuli ON a.a_id=r.a_id przy LEFT JOIN > gfc_articles_remarks) > > > Struktury tabel znajdują się na http://phpfi.com/119875 > > Moje pytanie: czy da się połączyć jakoś te zapytania lub uzyskać > zbliżony efekt jednym zapytaniem? > > Za wszelką pomoc i zainteresowanie z góry dziękuję > Witaj, wydaje mi się, że kolejność "działań" w zapytaniu jest następująca: najpierw wykonuje od lewej do prawej wszystkie LEFT JOIN, a potem dopiero łączy tabele, które są oddzielane przecinkami, dla przykładu:
tabela1, tabela2 left join tabela3 on tabela2.id=tabela3.id left join itd.
A więc najpierw chce połączyć tabelę nr 2 i 3, a dopiero potem tabelę 1 z wynikiem left join... U Ciebie jest tak, że chcesz jakby połączyć tabelę nr 2 i 3 poprzez połączenie "on" z tabeli 1 i 3 (a.id oraz r.id). Tego chyba nie chce przełknąć (twierdzi, że w tym miejscu a.id nie jest zadeklarowane, bo nie używa tej tabeli do połączenia).
To jest moje mniemanko, ale mogę się mylić... Artur Gancarz
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Gdzie MySQL 4.1, a gdzie 5.0?
[MS SQL] "set names" (mySQL) w MS SQL
oracle -> oracle lub oracle -> mysql replikacja - programy
[MySQL] Zwrot tego, co pasuje i nie pasuje :-/
[pgsql] Dostosowanie składni MySQL 5.0 -> PGSQL 8.1
[mysql] galeria zdjec - numerowanie zdjec
[mysql] CONCAT agregujący, ale nie GROUP_CONCAT()
mysql data 0000-00-00 na koniec
[MySQL] Problem z zapisem danych w bazie danych
jak przenieesc czesc tabeli do innej tabeli MySQL
zanotowane.pldoc.pisz.plpdf.pisz.pllunadance.htw.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|