ďťż
 
[MySQL]: Dodanie zliczania =?ISO-8859-2?Q?rekord=F3w_do_rozb?==?ISO-8859-2?Q?udowanego_zapytania?= ďťż
 
[MySQL]: Dodanie zliczania =?ISO-8859-2?Q?rekord=F3w_do_rozb?==?ISO-8859-2?Q?udowanego_zapytania?=
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

[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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    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.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • lunadance.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

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com