Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z zapytaniem
Forum PHP.pl > Forum > Bazy danych > MySQL
NetJaro
Witam, mam zapytanie:

  1. <?php
  2. $query = "SELECT member_details.jointed_date, member_details.f_name, member_details.l
    ogin, member_details.mem_id, member_details.email_id, count(member referrals.mem_id) as 'dupa' FROM `member_referrals`, member_details where member_details.mem_id=member_refe
    rrals.parent_id and member_details.joined_date >= '2005-09-30' in member_details.mem_id=member_referrals.mem_id group by member_referrals.pare
    nt_id order by 'dupa' DESC limit 0,30"
    ;
  3. ?>


Jednak pojawia się błąd:

Cytat
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'member_details.mem_id=member_referrals.mem_id group by member_referrals.parent_' at line 3


Co tutaj jest źle?
kszychu
Ten post brzmiał:
Cytat
Poprawna składnia to pole.tabela a nie jak u Ciebie tabela.pole

Przy okazji zwróć uwagę na umieszczanie postów we właściwych kategoriach. Ten przenoszę.


Ale jest to mój chory wymysł i nijak się ma do specyfikacji. Proszę się nim nie sugerować!
NetJaro
Aha, czyli zamiast 'member_details.jointed_date' dać 'jointed_date.mamber_details' ?

Możecie mi coś podpowiedzieć co do aliasów (aby zapytanie mniej zajmowało)?

P.S Przepraszam za złe umieszczenie tematu - pomyłka.

Pozdrawiam.
kszychu
Zamiast długich nazw tabel możesz używać ich aliasów. Alias definiujesz w sposób:
FROM bardzo_dluga_nazwa_tabeli as t1
i w całym zapytaniu możesz stosować:
SELECT t1.pole1, t1.pole2
oraz w warunkach:
WHERE t1.pole1= t2.pole2 (dla jakiejś innej tabeli t2)

Aliasy możesz również stosować dla nazw pól, np:
SELECT t1.pole1 as p1, t1.pole2 as p2 Później, przy wyciąganiu danych używasz już sobie tylko nazw p1 i p2 jako nazw pól.

Nazwa aliasów mogą być dowolne, ważne jednak, by nie kolidowały z nazwami tabel i pól oraz słowami kluczowymi dla mysqla.

-------------------------------------------
Update: Ten post też zmodyfikowałem.
SongoQ
Cytat
Poprawna składnia to pole.tabela a nie jak u Ciebie tabela.pole

Pierwsze slysze. Gdzie o tym slyszales?

Zawsze tak bylo i zawsze tak bedzie schemat.tabela.pole w Twoim przypadku tabela.pole.

Cytat
FROM bardzo_dluga_nazwa_tabeli as t1

W stanardzie SQLa nie zaleca sie stosowaine AS przed nazwa tabeli, w niektorych bazach to poprostu niedziala.

Cytat
member_details.joined_date >= '2005-09-30' in member_details.mem_id=member_referrals.mem_id

NIe ma czegos takiego w SQLu

Jesli masz agregacje w to pozostale pola musisz wymienic w GROUP BY

p.s.
@kszychu Po tobie bym sie takiej odpowiedzi nie spodziewal. sad.gif
dr_bonzo
joined_date AIN'T joinTed_date
kszychu
Cytat(SongoQ @ 2005-12-20 18:56:57)
Cytat
Poprawna składnia to pole.tabela a nie jak u Ciebie tabela.pole

Pierwsze slysze. Gdzie o tym slyszales?

Radosna twórczość własna spowodowana przeciążeniem pracą, nadmiarem (niedoborem, sam już nie wiem) kawy i Bóg wie czym jeszcze.

oczywiście w pierwszym poście w tym wątku napisałem takie głupoty, że jak teraz patrzę to mi wstyd!

Poprawię to, by ktoś przypadkiem nie zauważył i się nie zasugerował.
@NetJaro: bardzo Cię przepraszam, że wprowadziłem Cię w błąd.
@songoQ: dzięki za kubeł wody na łeb, czasami jest potrzebny.
NetJaro
@SongoQ, czyli jak to powinno odpowiednio wyglądać?

@kszychu, OK winksmiley.jpg
SongoQ
W Twoim przypadku zwracasz za duzo pol z funkcja agregujac i najoptymalniej mozna zrobic to jako podselect aby nie powtarzac po GROUP BY wszystkich pol.

Przyklad, bo niestety z Twojego zapytania nie zrozumialem co jest co.
  1. SELECT
  2. member_details.jointed_date,
  3. member_details.f_name,
  4. member_details.login,
  5. member_details.mem_id,
  6. member_details.email_id,
  7. t.ilosc
  8. FROM ( SELECT x, COUNT(*)
  9. FROM member_referrals GROUP BY x
  10. ) t, member_details
  11. WHERE t.x = member_details.x
  12. .
  13. .
  14. .


Mam nadzieje ze pomoglem smile.gif
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.