Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Mysql - duuze zapytanie, i mały problem
pieto
post
Post #1





Grupa: Zarejestrowani
Postów: 227
Pomógł: 1
Dołączył: 12.05.2002
Skąd: gdańsk

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


Witam, Ktoś pomoże mi znalesc odp. gdzie jest błąd w zapytaniu ?

  1. <?php
  2. select count(*) as total SELECT c.customers_id id, c.customers_email_address email, c.customers_firstname name, c.customers_lastname lastname, c.customers_telephone telephone, c.customers_fax fax , a.entry_company company, a.entry_street_address street, a.entry_postcode postcode, a.entry_city city , i.customers_info_number_of_logons num_logons, i.customers_info_date_account_created created, i.customers_info_date_of_last_logon last_logon , (SELECT count(*) FROM (orders o) where c.customers_id=o.customers_id) l_zam , (SELECT count(*) FROM (orders_query q) where c.customers_id=q.customer_id) l_zap , (select sum(op.final_price*op.products_quantity) FROM (orders_products op, orders o) where o.orders_id=op.orders_id and c.customers_id=o.customers_id) total_zam , (select sum(oop.customer_price*oop.products_quantity) FROM (orders_query_products oop, orders_query oo) where oo.orders_query_id=oop.orders_query_id and c.customers_id=oo.customer_id) total_zap ,(SELECT SUM(points) FROM (customers_points cs) WHERE status = 1 and c.customers_id=cs.customers_id) total_points , -least(c.customers_discount, cg.customers_groups_discount) rabat FROM (customers c, address_book a) LEFT OUTER JOIN customers_info i on (c.customers_id=i.customers_info_id) LEFT OUTER JOIN customers_groups cg on (c.customers_groups_id=cg.customers_groups_id) where a.address_book_id=c.customers_default_address_id AND c.customers_validation=1 AND c.customers_status=1 AND c.internal_use=0 ORDER BY id
  3. ?>


Zapytanie działa bez "select count(*) as total " - na pocztku zapytania
problem w tym ze musi to pozostać bo narzuca to funkcja do stronicowania wynikow


--------------------
Materiały i Wypracowania znajdziesz na zgapa.pl i
Encyklopedii Zgapedia
Jedyny przedawkowany portal motoryzacyjny to autoholik.pl
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
zimi
post
Post #2





Grupa: Zarejestrowani
Postów: 233
Pomógł: 9
Dołączył: 3.06.2007

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


spróbuj wstawić przecinek po total i wywalić ten select za total
Cytat
problem w tym ze musi to pozostać bo narzuca to funkcja do stronicowania wynikow

no to mam dziwne wrażenie że to jest zła funkcja...
jak to zapytanie będzie ładnie chodzić i nie zabije Ci serwa to respect...
na moje to powinieneś mieć inną strukturę danych
Go to the top of the page
+Quote Post
franki01
post
Post #3





Grupa: Zarejestrowani
Postów: 508
Pomógł: 75
Dołączył: 2.11.2005
Skąd: Bydgoszcz

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


2x SELECT w jednym zapytaniu? Pierwszy raz widze takie cos biggrin.gif

A nie lepiej zrobic zapytanie bez
Kod
select count(*) as total

na poczatku, a potem $num = mysql_num_rows($result); zeby zdobyc ilosc rekordow?

  1. <?php
  2. $query = "SELECT ....";  // tutaj zapytanie bez "select count(*) as total" na poczatku
  3. $result = mysql_query($query);
  4. $num = mysql_num_rows($result);
  5. ?>



Potem w $num masz ilosc rekordow. To samo co chciales zrobic, tyle ze bez kombinowania
Go to the top of the page
+Quote Post
pieto
post
Post #4





Grupa: Zarejestrowani
Postów: 227
Pomógł: 1
Dołączył: 12.05.2002
Skąd: gdańsk

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


wykopalem drugie selecta i dostaję:

#1140 - Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause

Ogolnie zapytaine smiga ze az milo, szkoda tylko ze stronnicowanie nie dziala,

apropo stronicoania funckcja na bank pewna - oryginalna z oscommerca, przechodzi przez nią duzo roznych zapytan i nie bylo dotychczas problemow..


--------------------
Materiały i Wypracowania znajdziesz na zgapa.pl i
Encyklopedii Zgapedia
Jedyny przedawkowany portal motoryzacyjny to autoholik.pl
Go to the top of the page
+Quote Post
Sedziwoj
post
Post #5





Grupa: Zarejestrowani
Postów: 793
Pomógł: 32
Dołączył: 23.11.2006
Skąd: Warszawa

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


Może zmieniła się baza danych, MySQL miał w zwyczaju pozwalać używania funkcji grupujących bez GROUP BY...
Ogólnie to są i tak zapytania, więc raz robisz
  1. SELECT count(*) AS total FROM (customers c, address_book a) LEFT OUTER JOIN customers_info i ON (c.customers_id=i.customers_info_id) LEFT OUTER JOIN customers_groups cg ON (c.customers_groups_id=cg.customers_groups_id) WHERE a.address_book_id=c.customers_default_address_id AND c.customers_validation=1 AND c.customers_status=1 AND c.internal_use=0

a potem
  1. SELECT c.customers_id id, c.customers_email_address email, c.customers_firstname name, c.customers_lastname lastname, c.customers_telephone telephone, c.customers_fax fax , a.entry_company company, a.entry_street_address street, a.entry_postcode postcode, a.entry_city city , i.customers_info_number_of_logons num_logons, i.customers_info_date_account_created created, i.customers_info_date_of_last_logon last_logon , (SELECT count(*) FROM (orders o) WHERE c.customers_id=o.customers_id) l_zam , (SELECT count(*) FROM (orders_query q) WHERE c.customers_id=q.customer_id) l_zap , (SELECT sum(op.final_price*op.products_quantity) FROM (orders_products op, orders o) WHERE o.orders_id=op.orders_id AND c.customers_id=o.customers_id) total_zam , (SELECT sum(oop.customer_price*oop.products_quantity) FROM (orders_query_products oop, orders_query oo) WHERE oo.orders_query_id=oop.orders_query_id AND c.customers_id=oo.customer_id) total_zap ,(SELECT SUM(points) FROM (customers_points cs) WHERE STATUS = 1 AND c.customers_id=cs.customers_id) total_points , -least(c.customers_discount, cg.customers_groups_discount) rabat FROM (customers c, address_book a) LEFT OUTER JOIN customers_info i ON (c.customers_id=i.customers_info_id) LEFT OUTER JOIN customers_groups cg ON (c.customers_groups_id=cg.customers_groups_id) WHERE a.address_book_id=c.customers_default_address_id AND c.customers_validation=1 AND c.customers_status=1 AND c.internal_use=0 ORDER BY id


Ale do tego dodając LIMIT, bo bez sensu pobierać wszystkie dane jak masz wyświetlić tylko część.

P.S. Oczywiście nie sprawdzałem poprawności całych zapytań....


--------------------
Algorytmy w PHP, czy ktoś o tym słyszał?
Dlaczego tak mało kobiet programuje? ponieważ nie zajmują się głupotami.
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 Aktualny czas: 22.08.2025 - 10:04