Резултаат от редове

kini

Registered
Здравейте,

Пиша относно нещо, което не знам дали е възможно да се направи. Доста търсих и пробвах различни примери, но уви..

Ситуацията е следната..

В таблица имам 15 колони за 15 изображения. (poster, poster2, poster3 до 15). Искам да направя COUNT, който да покаже в кои от полетата на даденото id има вкарани резултати.
Например ако има вкарани изображения и в 13 колони от 15-те, да извежда `13 изображения` - просто да показва цифрата, като общ резултат.

Моля за информация или решение. :?:
 
kini каза:
Здравейте,

Пиша относно нещо, което не знам дали е възможно да се направи. Доста търсих и пробвах различни примери, но уви..

Ситуацията е следната..

В таблица имам 15 колони за 15 изображения. (poster, poster2, poster3 до 15). Искам да направя COUNT, който да покаже в кои от полетата на даденото id има вкарани резултати.
Например ако има вкарани изображения и в 13 колони от 15-те, да извежда `13 изображения` - просто да показва цифрата, като общ резултат.

Моля за информация или решение. :?:

Дай си структурата на таблицата, за да мога да ти напиша кода според нея.
 
dakata__92 каза:
kini каза:
Здравейте,

Пиша относно нещо, което не знам дали е възможно да се направи. Доста търсих и пробвах различни примери, но уви..

Ситуацията е следната..

В таблица имам 15 колони за 15 изображения. (poster, poster2, poster3 до 15). Искам да направя COUNT, който да покаже в кои от полетата на даденото id има вкарани резултати.
Например ако има вкарани изображения и в 13 колони от 15-те, да извежда `13 изображения` - просто да показва цифрата, като общ резултат.

Моля за информация или решение. :?:

Дай си структурата на таблицата, за да мога да ти напиша кода според нея.


Заповядай.

Код:
CREATE TABLE `media` (
  `id` int(11) NOT NULL,
  `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `description` text COLLATE utf8_unicode_ci NOT NULL,
  `poster` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `poster2` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `poster3` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `poster4` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `poster5` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `poster6` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `poster7` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `poster8` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `poster9` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `poster10` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `poster11` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `poster12` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `poster13` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `poster14` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `poster15` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
 
[sql]SELECT sum((poster1 IS NOT NULL) +
(poster2 IS NOT NULL) +
(poster3 IS NOT NULL) +
(poster4 IS NOT NULL) +
(poster5 IS NOT NULL) +
(poster6 IS NOT NULL) +
(poster7 IS NOT NULL) +
(poster8 IS NOT NULL) +
(poster9 IS NOT NULL) +
(poster10 IS NOT NULL) +
(poster11 IS NOT NULL) +
(poster12 IS NOT NULL) +
(poster13 IS NOT NULL) +
(poster14 IS NOT NULL) +
(poster15 IS NOT NULL) +
) AS total
FROM media
WHERE id = $id;[/sql]

Това ти е заявката, с която ще изведеш тоталният брой на не празните колони за ред с идентификатор примерно 1. Ако имаш и PHP код, дай го за да ти помогнем ако не успееш.
 
dakata__92 каза:
[sql]SELECT sum((poster1 IS NOT NULL) +
(poster2 IS NOT NULL) +
(poster3 IS NOT NULL) +
(poster4 IS NOT NULL) +
(poster5 IS NOT NULL) +
(poster6 IS NOT NULL) +
(poster7 IS NOT NULL) +
(poster8 IS NOT NULL) +
(poster9 IS NOT NULL) +
(poster10 IS NOT NULL) +
(poster11 IS NOT NULL) +
(poster12 IS NOT NULL) +
(poster13 IS NOT NULL) +
(poster14 IS NOT NULL) +
(poster15 IS NOT NULL) +
) AS total
FROM media
WHERE id = $id;[/sql]

Това ти е заявката, с която ще изведеш тоталният брой на не празните колони за ред с идентификатор примерно 1. Ако имаш и PHP код, дай го за да ти помогнем ако не успееш.

Благодаря!

Това е начина, по който се опитвам да извадя резултата в момента, но не се получава

Код:
$placeid = $_GET['id'];

$result=mysql_query("SELECT sum((poster IS NOT NULL) +
           (poster2 IS NOT NULL) +
           (poster3 IS NOT NULL) +
           (poster4 IS NOT NULL) +
           (poster5 IS NOT NULL) +
           (poster6 IS NOT NULL) +
           (poster7 IS NOT NULL) +
           (poster8 IS NOT NULL) +
           (poster9 IS NOT NULL) +
           (poster10 IS NOT NULL) +
           (poster11 IS NOT NULL) +
           (poster12 IS NOT NULL) +
           (poster13 IS NOT NULL) +
           (poster14 IS NOT NULL) +
           (poster15 IS NOT NULL) +
          ) AS total
FROM media
WHERE id = '$placeid'");
$data=mysql_fetch_assoc($result);
echo $data['total'];
 
[sql]
SELECT count(poster1) +
count(poster2) +
count(poster3) +
count(poster4) +
count(poster5) +
count(poster6) +
count(poster7) +
count(poster8) +
count(poster9) +
count(poster10) +
count(poster11) +
count(poster12) +
count(poster13) +
count(poster14) +
count(poster15)
FROM media
WHERE id = $id;
[/sql]
 
dakata__92 каза:
[sql]
SELECT count(poster1) +
count(poster2) +
count(poster3) +
count(poster4) +
count(poster5) +
count(poster6) +
count(poster7) +
count(poster8) +
count(poster9) +
count(poster10) +
count(poster11) +
count(poster12) +
count(poster13) +
count(poster14) +
count(poster15)
FROM media
WHERE id = $id;
[/sql]

Все още нищо не се изобразява. Кофти ситуация :cry:
 
Щеее направим старомодно броене докато се сетя как се правеше с SQL :D
PHP:
<?php
	
$placeid = $_GET['id'];

$result=mysql_query("SELECT poster1,
       poster2,
       poster3,
       poster4,
       poster5,
       poster6,
       poster7,
       poster8,
       poster9,
       poster10,
       poster11,
       poster12,
       poster13,
       poster14,
       poster15
FROM media
WHERE id = '$placeid'");
$data=mysql_fetch_assoc($result);
$count = 0;
foreach ($data as $val) {
	if (!empty($val)) {
		$count++;
	}
}
print $count;
 
Само да кажа, че подхода е абсолютно погрешен и самата ситуация доказва това.

Предполагам това искаш да постигнеш:

http://sqlfiddle.com/#!9/52a622/5

[sql]
SELECT
`id`,
`title`,
(
IF(IFNULL(`poster`, '') = '', 0, 1) +
IF(IFNULL(`poster2`, '') = '', 0, 1) +
IF(IFNULL(`poster3`, '') = '', 0, 1) +
IF(IFNULL(`poster4`, '') = '', 0, 1) +
IF(IFNULL(`poster5`, '') = '', 0, 1) +
IF(IFNULL(`poster6`, '') = '', 0, 1) +
IF(IFNULL(`poster7`, '') = '', 0, 1) +
IF(IFNULL(`poster8`, '') = '', 0, 1) +
IF(IFNULL(`poster9`, '') = '', 0, 1) +
IF(IFNULL(`poster10`, '') = '', 0, 1) +
IF(IFNULL(`poster11`, '') = '', 0, 1) +
IF(IFNULL(`poster12`, '') = '', 0, 1) +
IF(IFNULL(`poster13`, '') = '', 0, 1) +
IF(IFNULL(`poster14`, '') = '', 0, 1) +
IF(IFNULL(`poster15`, '') = '', 0, 1)
) AS `Total Columns Filled`
FROM
`media`
WHERE
`id` = 1
;
[/sql]

Погледни линка за демо.
 
Revelation каза:
Само да кажа, че подхода е абсолютно погрешен и самата ситуация доказва това.

Предполагам това искаш да постигнеш:

http://sqlfiddle.com/#!9/52a622/5

[sql]
SELECT
`id`,
`title`,
(
IF(IFNULL(`poster`, '') = '', 0, 1) +
IF(IFNULL(`poster2`, '') = '', 0, 1) +
IF(IFNULL(`poster3`, '') = '', 0, 1) +
IF(IFNULL(`poster4`, '') = '', 0, 1) +
IF(IFNULL(`poster5`, '') = '', 0, 1) +
IF(IFNULL(`poster6`, '') = '', 0, 1) +
IF(IFNULL(`poster7`, '') = '', 0, 1) +
IF(IFNULL(`poster8`, '') = '', 0, 1) +
IF(IFNULL(`poster9`, '') = '', 0, 1) +
IF(IFNULL(`poster10`, '') = '', 0, 1) +
IF(IFNULL(`poster11`, '') = '', 0, 1) +
IF(IFNULL(`poster12`, '') = '', 0, 1) +
IF(IFNULL(`poster13`, '') = '', 0, 1) +
IF(IFNULL(`poster14`, '') = '', 0, 1) +
IF(IFNULL(`poster15`, '') = '', 0, 1)
) AS `Total Columns Filled`
FROM
`media`
WHERE
`id` = 1
;
[/sql]

Погледни линка за демо.

Впрочем, нещо подобно и на мен ми се завъртя в главата, но си признавам, че тотално изключих снощи, как точно да се справя с този проблем и реших да пратя на човека поне един прост брояч.
 

Горе