Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jak zliczyć coś takiego?
xamil
post
Post #1





Grupa: Zarejestrowani
Postów: 158
Pomógł: 0
Dołączył: 9.01.2005

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


Dwa pytania. Pierwsze chyba proste ale i tak sobie nie radze. Jeżeli chodzi o sql bowiem to dopiero raczkuje. drugie nieco bardziej skomplikowane i aż się wstyd przyznać nie pisane przeze mnie... niestety osoba która mi to napisała nie jest mi obecnie w stanie teraz pomóc a potrzebuje szybkiej odpowiedzi.

1.
  1. SELECT branze.id, count(firmy.id) ilosc_firm
  2. FROM branze, firmy WHERE branze.id = firmy.id_branzy GROUP BY branze.id;


Zapytanie to ma mi wyciągnąć wszystkie branze (z tabeli branze) i liczbe firm (z tabeli firmy) o takiej samej branży. Wszystko idzie gładko ale do czasu... W przypadku gdy dana branża nie jest przypisana do żadnej firmy potrzebuje wyświelić wartość zero. Niestety zapytanie w obecnej postaci pomija takie branze bowiem nie spełniają warunku łączenia tabel branze.id = firmy.id_branzy.

2.
  1. SELECT firmy.id, kontakty.id_handlowca, branze.nazwa, kontakty.DATA data_spotkania, min( kontakty_all.DATA )
  2. FROM handlowcy, branze, kontakty
  3. LEFT JOIN firmy ON kontakty.id_firmy = firmy.id
  4. LEFT JOIN kontakty kontakty_all ON kontakty_all.id_firmy = firmy.id
  5. WHERE (
  6. kontakty.id_handlowca = '2' AND branze.id = firmy.id_branzy AND handlowcy.id = kontakty.id_handlowca AND firmy.nazwa LIKE '%'
  7. )
  8. GROUP BY firmy.id, kontakty.DATA ASC HAVING min( kontakty_all.DATA ) = data_spotkania
  9. ORDER BY firmy.nazwa



Potrzebuje zliczyć całkowitą ilośc rekordów takiego zapytania. Potrzebne jest mi to do wyświetlenia konkretnej liczby rekordów na stronie (np. 25) od zadanej pozycji. Tak abym w następnym zapytaniu mógł użyć np. LIMIT 25,25;

UWAGA!!! Zapytania nie mogą zawierać podzapytań.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
xamil
post
Post #2





Grupa: Zarejestrowani
Postów: 158
Pomógł: 0
Dołączył: 9.01.2005

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


MySQL zwrócił komunikat:
#1111 - Invalid use of group function

Wszystko byłoby ok gdyby nie to że narzucenie SUM na MIN powoduje taki właśnie błąd.

Wywołanie takiego zapytania:

  1. SELECT count(firmy.id), firmy.id, handlowcy.id, kontakty.DATA data_spotkania, min( kontakty_all.DATA )
  2. FROM kontakty LEFT JOIN firmy ON kontakty.id_firmy = firmy.id LEFT JOIN kontakty kontakty_all ON kontakty_all.id_firmy = firmy.id LEFT JOIN handlowcy ON (handlowcy.id=kontakty.id_handlowca) LEFT JOIN branze ON (branze.id=firmy.id_branzy) WHERE ( kontakty.id_handlowca='2' AND firmy.nazwa LIKE '%' ) GROUP BY handlowcy.id, kontakty.DATA ASC HAVING min( kontakty_all.DATA ) = data_spotkania;


Powoduje wyświetlenie tabelki:

count(firmy.id) | firmy.id | handlowcy.id | kontakty.DATA data_spotkania | min( kontakty_all.DATA
1 | 15 | 2 | 0000-00-00 00:00:01 | 0000-00-00 00:00:01
1 | 14 | 2 | 2001-01-11 18:59:24 | 2001-01-11 18:59:24
12 | 2 | 2 | 2005-01-03 23:37:44 | 2005-01-03 23:37:44
4 | 3 | 2 | 2005-01-03 23:42:26 | 2005-01-03 23:42:26
22 | 4 | 2 | 2005-01-04 10:10:10 | 2005-01-04 10:10:10
8 | 5 | 2 | 2005-01-04 22:31:58 | 2005-01-04 22:31:58

Ogólnie rzecz biorąc identyczne zapytanie wyświetla mi rekordy w bazie i jest ok ale policzyć tego nie potrafie:(

Czy aby
  1. GROUP BY handlowcy.id
nie powinno załatwiać sprawy? A jeśli tak to czemu nie załatwia?

Ten post edytował xamil 11.01.2005, 22:17:51
Go to the top of the page
+Quote Post

Posty w temacie


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: 8.10.2025 - 21:52