Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: MySQL - problem z GROUP BY
Forum PHP.pl > Forum > Bazy danych > MySQL
krowal
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
nospor
Pytanie za 100 punktów:
skoro masz problem z Mysql to czemu walisz to na PHP ?! (pytanie retorycznie - nie odpowiadaj)

ps: przenosze
krowal
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. ?>
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.