Zliczanie głosów w MySQL


(northwest) #1

Witam serdecznie,

mam 2 tabele:

 

 

w tabeli dane - mam tytuły książek na które oddawane są głosy.

w tabeli glosy - znajdują się głosy użytkowników na daną książkę.

 

Potrzebuję zapytanie które wyświetli mi coś takiego w wyniku:

  • książka 1 = XX głosów

  • książka 2 = YY głosów

itp.

 

Dane łączą się następująco: glosy.glos = dane.id

 

Ma ktoś może pomysł jak to zrobić?

 

Bardzo proszę o pomoc,

Northwest

 

 

 

 

 


(dr.boczek) #2
tabele:

CREATE TABLE IF NOT EXISTS `glosy` (
  `k_id` bigint(20) unsigned NOT NULL,
  `glos` bigint(35) DEFAULT NULL,
  `wartosc` bigint(35) DEFAULT NULL,
  `data_dodania` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin2;




INSERT INTO `glosy` (`k_id`, `glos`, `wartosc`, `data_dodania`) VALUES
(1, 1, NULL, '2014-10-13 22:24:23'),
(1, 1, NULL, '2014-10-13 22:24:23'),
(2, 1, NULL, '2014-10-13 22:24:48'),
(2, 1, NULL, '2014-10-13 22:24:48'),
(2, 1, NULL, '2014-10-13 22:24:55'),
(2, 1, NULL, '2014-10-13 22:24:55'),
(2, 1, NULL, '2014-10-13 22:27:20'),
(2, 1, NULL, '2014-10-13 22:27:20');




CREATE TABLE IF NOT EXISTS `ksiazki` (
  `id` bigint(35) unsigned NOT NULL AUTO_INCREMENT,
  `tytul` varchar(455) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  `enable` int(10) DEFAULT '1',
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin2 AUTO_INCREMENT=3 ;




INSERT INTO `ksiazki` (`id`, `tytul`, `enable`) VALUES
(1, 'ksiazka 1', 1),
(2, 'ksiazka 2', 1);

i zapytanie:

SELECT ksiazki.tytul AS ksiazki ,COUNT(*) AS glosy FROM
ksiazki
LEFT JOIN glosy ON ksiazki.id = glosy.k_id
GROUP BY glosy.k_id

przetestowalem u siebie.


(northwest) #3

dziękuje :slight_smile: dlaczego zmieniłeś strukturę bazy?


(dr.boczek) #4

 

żebym wiedział co robię. Dlaczego tabelę “książki” nazwałeś “dane” ? :slight_smile:

 

 

równie dobrze tabelę głosy mogłeś nazwać “pralka”

 

Mam nadzieję, że już rozumiesz. Tworzenie baz danych wymaga pewnej logiki w myśleniu i jak sie robi proste zapytania typu

SELECT * FROM dane;

to nie ma problemu ale jak się zacznie tworzyć skomplikowane zapytania z kilku tabel jednocześnie to ciężko dojść do ładu.

Zresztą ta moja struktura i tak nie jest do końca prawidłowa ale do tego z czasem sam dojdziesz jak będziesz kontynuował naukę SQL. Na szybko ci zrobiłem.


(kalitt) #5
PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`)

Jeśli pole jest PRIMARY to samo w sobie jest unikalne :stuck_out_tongue: więc UNIQUE jest nie potrzebne :stuck_out_tongue:


(dr.boczek) #6

 

wiem, nie ucelowałem myszką w phpmyadminie a potrzebny był autoincrement