Как получить общее количество записей для каждой строки??

  • Автор темы PaySitePass
  • 53
  • Обновлено
  • 15, May 2024
  • #1
Я очень озадачен этим вопросом.

У меня на сайте есть раздел, где пользователи могут участвовать в различных конкурсных рисунках, у меня есть 2 таблицы: 1 для самих призов и 1 для заявок. Я могу получить призы и ВСЕГО заявок, но мне трудно понять, как включить записи конкретных пользователей в каждый розыгрыш.

Вот пример моих таблиц (которые можно изменить, они больше нигде на сайте не используются). призы (название таблицы)

Prize_id (ключ), призстатус, имяприза, изображение_приза --------------- ------------ ------------ ----------- 1, 1, iPhone, image.jpg 2, 1, Рюкзак, image2.jpg 3, 1, Подарочная карта, image3.jpg 4, 1, Свеча, image4.jpg 5, 1, Что-то, image5.jpg записи (имя таблицы) входнойид (ключ), призовойид, пользовательский_ид, результат ---------------- --------- --------- ---------- 1, 1, 1000, 1 2, 1, 1000, 1 3, 1, 1001, 1 4, 2, 1000, 1 5, 1, 1000, 1 Это мой текущий оператор SQL: ВЫБЕРИТЕ призы.prize_id, призы.имяприза, призы.призизображение, СУММА(результат) КАК общее количествозаписей ИЗ призов ОСТАВЬТЕ ВНЕШНИЕ ОБЪЕДИНИТЕ записи ON (призы.призид = записи.призид) ГДЕ призы.призстатус = 1 ГРУППИРУЙТЕ ПО призам.prize_id; В идеале хотелось бы иметь 1 заявление со всей информацией.

Я использую СУММУ Хайме, чтобы получить общее количество записей, это достаточно просто, но я не могу придумать, как получить количество записей для каждой строки, которую ввел пользователь.

Например, если идентификатор пользователя был 1000: Prize_id, имяприза, изображениеприза, всегозаписей, записейпользователей --------- ------------- ------------- -------------- -------------- 1, iPhone, image.jpg, 4, 3 2, Рюкзак, image2.jpg, 1, 1 3, Подарочная карта, image3.jpg, 0, 0 4, Свеча, image4.jpg, 0, 0 5, Что-то, image5.jpg, 0, 0 Любая помощь будет принята с благодарностью!!

PaySitePass


Рег
24 Jan, 2012

Тем
1

Постов
2

Баллов
12
  • 05, Jun 2024
  • #2
Привет Я совсем не уверен в конструкции вашей базы данных, но оставлю это для другого поста. Я внес пару изменений, и я просто не мог оставить все как есть. Проверить http://sqlfiddle.com/#!9/ad2910/4

и поиграйтесь с запросами
 select `entries`.`id`, `contests`.`prize_name`, `entries`.`outcome`, `entries`.`entry_image`

from entries

inner join contests on entries.contest_id = contests.id

where user_id = 1000;

select contests.id, contests.prize_name, contests.status, entries.user_id,

count(entries.id) as counter,

case when sum(entries.outcome) > 0 then 'winner' else '' end as outcome

from entries

inner join contests on entries.contest_id = contests.id

group by contests.id, entries.user_id

order by contests.status, contests.prize_name, entries.user_id;
Код (sql): и
 CREATE TABLE IF NOT EXISTS `contests` ( `id` int(6) NOT NULL, `status` varchar(20) NOT NULL, `prize_name` varchar(200) NOT NULL, `prize_image` varchar(200) not null, PRIMARY KEY (`id`) ) DEFAULT CHARSET=utf8; INSERT INTO `contests` (`id`, `status`, `prize_name`, `prize_image`) VALUES ('1', 'Finished', 'iPhone', 'image1.jpg'), ('2', 'Active', 'Backpack', 'image2.jpg'), ('3', 'Active', 'Gift Card', 'image3.jpg'), ('4', 'Draft', 'Candle', 'image4.jpg'), ('5', 'Draft', 'Something', 'image5.jpg'); CREATE TABLE IF NOT EXISTS `entries` ( `id` int(6) NOT NULL, `contest_id` int(6) NOT NULL, `user_id` int(6) NOT NULL, `outcome` varchar(200) not null, `entry_image` varchar(200) null, PRIMARY KEY (`id`) ) DEFAULT CHARSET=utf8; INSERT INTO `entries` (`id`, `contest_id`, `user_id`, `outcome`, `entry_image`) VALUES ('1', 1, 1000, 0, 'entry1.jpg'), ('2', 1, 1000, 1, 'entry2.jpg'), ('3', 1, 1001, 0, 'entry3.jpg'), ('4', 2, 1000, 0, 'entry4.jpg'), ('5', 2, 1001, 1, 'entry5.jpg'), ('6', 3, 1002, 0, 'entry6.jpg'), ('7', 3, 1003, 0, 'entry7.jpg');
Код (sql):
 

spoker1


Рег
05 Mar, 2012

Тем
0

Постов
2

Баллов
2
Тем
49554
Комментарии
57426
Опыт
552966

Интересно