Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [sql] problem z zagnieżdżonym SELECT COUNT
pgrzelka
post 29.04.2010, 14:20:19
Post #1





Grupa: Zarejestrowani
Postów: 313
Pomógł: 24
Dołączył: 9.08.2008
Skąd: Kielce

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


Witam

mam takie zapytanie
  1. SELECT `p`.*, (SELECT COUNT(*) FROM `social_program_user` `u` WHERE u.social_program_id=p.social_program_id) AS `users` FROM `social_program` AS `p`

wyskakuje błąd Column not found: 1054 Unknown column 'u.social_program_id' in 'where clause''

natomiast jeśli przekształcę zapytanie do takiej postaci ( czyli usunę `u` )
  1. SELECT `p`.*, (SELECT COUNT(*) FROM `social_program_user` WHERE social_program_id=p.social_program_id) AS `users` FROM `social_program` AS `p`

to liczy mi wszystkie rekordy z tabeli 'social_program_user' ponieważ social_program_id=p.social_program_id zawsze zwraca 1
problemem jest to że w obu tabelach są takie same pola pełniące różne funkcje, poniżej dump z tych tabel
  1. CREATE TABLE IF NOT EXISTS `social_program` (
  2. `social_program_id` int(11) NOT NULL AUTO_INCREMENT,
  3. `title` varchar(255) DEFAULT NULL,
  4. `desc` text,
  5. `date_added` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  6. `last_modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  7. `admins_id` int(11) DEFAULT NULL,
  8. `date_begin` date NOT NULL DEFAULT '0000-00-00',
  9. `date_end` date NOT NULL DEFAULT '0000-00-00',
  10. `payments_limit` int(255) NOT NULL,
  11. `points_conversion` float NOT NULL,
  12. PRIMARY KEY (`social_program_id`) USING BTREE,
  13. KEY `admins_idx` (`admins_id`) USING BTREE
  14. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

  1. CREATE TABLE IF NOT EXISTS `social_program_user` (
  2. `social_program_user_id` int(11) NOT NULL AUTO_INCREMENT,
  3. `date_added` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  4. `social_program_id` int(11) DEFAULT NULL,
  5. `social_program_group_id` int(11) DEFAULT NULL,
  6. `user_id` int(11) DEFAULT NULL,
  7. `last_modified` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  8. PRIMARY KEY (`social_program_user_id`) USING BTREE,
  9. KEY `social_group_idx` (`social_program_group_id`) USING BTREE
  10. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;


--------------------
Go to the top of the page
+Quote Post
robsohn
post 29.04.2010, 16:23:52
Post #2





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 28.04.2010

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


A takie zapytanie nie rozwiąże problemu ?

  1. SELECT p.*, COUNT(u.id) FROM social_program AS p LEFT JOIN social_program_user AS u USING(social_program_id) GROUP BY p.social_program_id


Ten post edytował robsohn 29.04.2010, 16:24:26
Go to the top of the page
+Quote Post
pgrzelka
post 30.04.2010, 10:53:16
Post #3





Grupa: Zarejestrowani
Postów: 313
Pomógł: 24
Dołączył: 9.08.2008
Skąd: Kielce

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


@robsohn: nie działa Twoje zapytanie

potrzebuję pobrać listę programów z tabeli 'social_program' + ilość użytkowników przypisanych do każdego programu wg.
social_program.social_program_id = social_program_user.social_program_id

problemem jest to że obie tabele mają takie same nazwy kolumn a nie mogę zmienić tych nazw ponieważ bym musiał bardzo dużo zmian robić w innym systemie, który używa tych tabel


--------------------
Go to the top of the page
+Quote Post
quality
post 30.04.2010, 11:00:58
Post #4





Grupa: Zarejestrowani
Postów: 172
Pomógł: 9
Dołączył: 13.02.2006
Skąd: Warszawa

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


Sproboj tak:

  1. SELECT p.*, COUNT(u.social_program_user_id) FROM social_program AS p LEFT JOIN social_program_user AS u ON p.social_program_id=u.social_program_id GROUP BY p.social_program_id


Zapytanie robsohna tez by dzialalo, gdys mial tabele innoDB polaczone relacjami i gdybys troche pomyslal i zmienil u.id na u.social_program_user_id smile.gif

Musi dzialac smile.gif

Ten post edytował quality 30.04.2010, 11:04:46


--------------------
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: 19.06.2025 - 10:32