Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> MySQL - problem z GROUP BY
krowal
post 31.05.2007, 07:48:40
Post #1





Grupa: Zarejestrowani
Postów: 561
Pomógł: 72
Dołączył: 15.11.2006

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


Oto dwie tabele:

tbl_carts:
  1. CREATE TABLE `tbl_carts` (
  2. `id` int(10) NOT NULL AUTO_INCREMENT,
  3. `session_id` varchar(32) NOT NULL DEFAULT '',
  4. `user_id` int(10) NOT NULL DEFAULT '0',
  5. `order_nr` int(10) NOT NULL DEFAULT '0',
  6. `payment_id` tinyint(4) NOT NULL DEFAULT '0',
  7. `color` varchar(6) NOT NULL DEFAULT '0',
  8. `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  9. `cart_status` int(3) NOT NULL DEFAULT '0',
  10. `user_comment` tinytext NOT NULL,
  11. `user_ip` varchar(15) NOT NULL DEFAULT '000.000.000.000',
  12. `tmp_address` int(10) NOT NULL DEFAULT '0',
  13. PRIMARY KEY (`id`)
  14. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=111 ;

tbl_carts_products:
  1. CREATE TABLE `tbl_carts_products` (
  2. `id` int(8) NOT NULL AUTO_INCREMENT,
  3. `cart_id` int(6) NOT NULL DEFAULT '0',
  4. `product_id` int(8) NOT NULL DEFAULT '0',
  5. `item_md5` varchar(32) NOT NULL DEFAULT '0',
  6. `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  7. `amount` tinyint(3) NOT NULL DEFAULT '0',
  8. `price` decimal(9,2) NOT NULL DEFAULT '0.00',
  9. `properties` tinytext NOT NULL,
  10. `art_code` tinytext NOT NULL,
  11. PRIMARY KEY (`id`)
  12. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


jest to tabela koszyka i tabela produktów w koszyku, łączenie odbywa się po cart_id i jest to łączenie jeden do wielu, tbl_carts.id(jeden)<----(wiele)tbl_carts_products.cart_id

chciałbym stworzyć zapytanie które wybierze mi id koszyka i odpowiednio do tego sumę przedmiotów tegoż koszyka, warunek: (data ostatniej aktualizacji koszyka + zdefiniowany czas wygaśnięcia) mniejsze niż (czas teraźniejszy)

oto moje zapytanie:
  1. <?php
  2. $query =  'SELECT tc.id COUNT(tcp.cart_id) AS pr_amount 
  3.  FROM tbl_carts AS tc, tbl_carts_products AS tcp 
  4.  WHERE (tc.date + '.$this->exp_time.') < NOW() 
  5.  GROUP BY tcp.cart_id;';
  6. ?>


i błąd który pokazuje:
  1. 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 'COUNT(tcp.cart_id) AS pr_amount FROM tbl_carts AS tc, tbl_carts_products AS tcp ' at line 1


wersja MySQL: 4.1.12a-nt

wiem że problem jest z GROUP BY, a może powinienem użyć JOIN, tak czy inaczej nie wiem jak to zrobić, proszę o pomoc.

pozdrawiam

Ten post edytował krowal 31.05.2007, 07:49:45


--------------------
Nawet świnka może wejść na drzewo kiedy jest chwalona :)
Go to the top of the page
+Quote Post
nospor
post 31.05.2007, 07:51:14
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Pytanie za 100 punktów:
skoro masz problem z Mysql to czemu walisz to na PHP ?! (pytanie retorycznie - nie odpowiadaj)

ps: przenosze


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
krowal
post 31.05.2007, 08:59:12
Post #3





Grupa: Zarejestrowani
Postów: 561
Pomógł: 72
Dołączył: 15.11.2006

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


Ok, sam sobie pomogłem smile.gif
zrobiłem tak:
  1. <?php
  2. $query =  'SELECT tc.id, (SELECT COUNT(*) FROM tbl_carts_products AS tcp WHERE tc.id = tcp.cart_id) AS pr_amount 
  3.  FROM tbl_carts AS tc
  4.  WHERE ((UNIX_TIMESTAMP(tc.date) + '.$this->exp_time.') < UNIX_TIMESTAMP());';
  5. ?>


--------------------
Nawet świnka może wejść na drzewo kiedy jest chwalona :)
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 Wersja Lo-Fi Aktualny czas: 13.06.2025 - 06:25