Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: MySQL - вложенные запросы

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Не корректный результат выполнения запроса
Ja_kazanova
Отправлено: 11 Апреля, 2013 - 14:22:06
Post Id



Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Апр. 2013  


Помог: 0 раз(а)




Доброго времени суток, уважаемые форумчане)
Я пишу модуль голосований для своего сайта. Буквально вчера мне понадобилось вывести голосования в категорию не голосованых. То есть, что-бы пользователю выводились только вопросы на которые он еще не давал ответа.
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2.         /*
  3.                 Таблица статистических опросов
  4.         */
  5.         CREATE TABLE IF NOT EXISTS `ac_opros`
  6.         (
  7.                 `id` SERIAL,
  8.                 `time` bigint UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Время создания',
  9.                 `time_alter` bigint UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Время        последнего изминения',
  10.                 `time_end` bigint UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Время окончания опроса',
  11.                 `name` varchar(128) NOT NULL DEFAULT '' COMMENT 'Заголовок опроса',
  12.                 `opis` varchar(1024) NOT NULL DEFAULT '' COMMENT 'Текст описания',
  13.                 `open` SET('0', '1') NOT NULL DEFAULT '0' COMMENT 'Возможность голосовать. 0 - пользователи, 1 - пользователи и гости',
  14.                 PRIMARY KEY (`id`),
  15.                 UNIQUE KEY (`name`),
  16.                 KEY (`time`, `time_alter`, `time_end`)
  17.         ) ENGINE InnoDB CHARACTER SET UTF8 COLLATE utf8_general_ci;
  18.         /*
  19.                 Варианты ответов
  20.         */
  21.         CREATE TABLE IF NOT EXISTS `ac_opros_variant`
  22.         (
  23.                 `id` SERIAL,
  24.                 `time_alter` bigint UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Время последнего ответа',
  25.                 `id_file` bigint UNSIGNED NOT NULL DEFAULT '0' COMMENT 'ID новости',
  26.                 `name` varchar(128) NOT NULL DEFAULT '' COMMENT 'Вариант ответа',
  27.                 PRIMARY KEY (`id`, `name`),
  28.                 FOREIGN KEY (`id_file`) REFERENCES `ac_opros` (`id`)
  29.                 ON DELETE RESTRICT ON UPDATE CASCADE
  30.         ) ENGINE InnoDB CHARACTER SET UTF8 COLLATE utf8_general_ci;
  31.         /*
  32.                 Учет ответов
  33.         */
  34.         CREATE TABLE IF NOT EXISTS `ac_opros_variant_set`
  35.         (
  36.                 `id` SERIAL,
  37.                 `id_file` bigint UNSIGNED NOT NULL DEFAULT '0' COMMENT 'ID опроса',
  38.                 `id_variant` bigint UNSIGNED NOT NULL DEFAULT '0' COMMENT 'ID варианта опроса',
  39.                 `id_user` bigint UNSIGNED NOT NULL DEFAULT '0' COMMENT 'ID голосовавшего',
  40.                 `time` bigint UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Время ответа',
  41.                 `browser` varchar(32) NOT NULL DEFAULT '' COMMENT 'Название браузера',
  42.                 `version` varchar(32) NOT NULL DEFAULT '' COMMENT 'Версия браузера',
  43.                 `ip` varchar(32) NOT NULL DEFAULT '' COMMENT 'IP голосовавшего',
  44.                 PRIMARY KEY (`id`),
  45.                 KEY (`time`, `id_user`, `ip`),
  46.                 FOREIGN KEY (`id_file`) REFERENCES `ac_opros` (`id`)
  47.                 ON DELETE RESTRICT ON UPDATE CASCADE,
  48.                 FOREIGN KEY (`id_variant`) REFERENCES `ac_opros_variant` (`id`)
  49.                 ON DELETE RESTRICT ON UPDATE CASCADE
  50.         ) ENGINE InnoDB CHARACTER SET UTF8 COLLATE utf8_general_ci;
  51.        

По мотивам ранее рассмотренных сценариев составляю запрос
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM `ac_opros` WHERE `time_end` > UNIX_TIMESTAMP() AND `id` <> IF((SELECT COUNT(*) FROM `ac_opros_variant_set`) > 0, EXISTS (SELECT `id_file` FROM `ac_opros_variant_set` WHERE `id_user` = '{$user -> id}' OR `ip` = '{$user -> ip}'), 0)


Но, возвращаемый результат более чем не коректен. То есть, убирается только один голосованый опрос, а остальные выводятся все равно. Если же убрать с вырежения EXISTS - возвращается ошибка под запроса, с EXISTS же под запрос эдентичен так, если-бы в конец добавить LIMIT 1. Но, мне нужно что-бы были исключены все опросы за которые текущий пользователь уже голосовал. Я слышал, что в MySQL уже имеются циклы такие как WHILE, LOOP и тп. Но раскрытую инструкцию по их использованию я со своим корявим г* интернетом я найти самостоятельо не могу. По этому у меня огромная прозьба, спецы, подскажите пльз с кодом и выше упомянутой литературки тоже подкиньте если есть. За ранее Вам благодарен, спасибо)
PS
Я бы мог все решить с помощью PHP но, хочется сделать все красиво и правильно, помогите, а)


Отредактировано модератором: Мелкий, 11 Апреля, 2013 - 14:29:22
 
 Top
Мелкий Супермодератор
Отправлено: 11 Апреля, 2013 - 14:33:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Ja_kazanova пишет:
что-бы пользователю выводились только вопросы на которые он еще не давал ответа.

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `ac_opros`.* FROM `ac_opros` LEFT JOIN `ac_opros_variant_set` ON id_user=6432 AND `ac_opros`.id=`id_file` WHERE `id_file` IS NULL

?


-----
PostgreSQL DBA
 
 Top
Ja_kazanova
Отправлено: 11 Апреля, 2013 - 14:42:51
Post Id



Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Апр. 2013  


Помог: 0 раз(а)




Извините, решение явилось прям, как Менделееву во сне. Вот правильный код (кому интересно)
SELECT * FROM `ac_opros` WHERE `time_end` > UNIX_TIMESTAMP() AND IF((SELECT COUNT(*) FROM `ac_opros_variant_set`) > 0, `id` NOT IN (SELECT `id_file` FROM `ac_opros_variant_set` WHERE `id_user` = '{$user -> id}' OR `ip` = '{$user -> ip}'), `id` <> '0')
Благодарю все за внимание и желание помочь. Тему можно крыть)
(Добавление)
Мелкий пишет:
Ja_kazanova пишет:
что-бы пользователю выводились только вопросы на которые он еще не давал ответа.

CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `ac_opros`.* FROM `ac_opros` LEFT JOIN `ac_opros_variant_set` ON id_user=6432 AND `ac_opros`.id=`id_file` WHERE `id_file` IS NULL

?

Спасибо но, JOIN(ов) я стараюсь избегать
 
 Top
Zuldek
Отправлено: 11 Апреля, 2013 - 15:29:02
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




Ja_kazanova пишет:
Спасибо но, JOIN(ов) я стараюсь избегать

А в чем разница между JOINом и
Цитата:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM `ac_opros` WHERE `time_end` > UNIX_TIMESTAMP() AND IF((SELECT COUNT(*) FROM `ac_opros_variant_set`) > 0, `id` NOT IN (SELECT `id_file` FROM `ac_opros_variant_set`

?
 
 Top
Мелкий Супермодератор
Отправлено: 11 Апреля, 2013 - 15:34:11
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Ja_kazanova пишет:
Спасибо но, JOIN(ов) я стараюсь избегать

Отчего же?
Тогда вам и подзапросы использовать никак нельзя. Некоторые подзапросы оптимизатор переписывает в join, потому что это заметно эффективнее.


-----
PostgreSQL DBA
 
 Top
Ja_kazanova
Отправлено: 11 Апреля, 2013 - 15:45:12
Post Id



Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Апр. 2013  


Помог: 0 раз(а)




Мелкий пишет:
Ja_kazanova пишет:
Спасибо но, JOIN(ов) я стараюсь избегать

Отчего же?
Тогда вам и подзапросы использовать никак нельзя. Некоторые подзапросы оптимизатор переписывает в join, потому что это заметно эффективнее.

От чего-же? В приведенном мною примере используется 2 под запроса + проверка на наличие записей в таблице статистики. Потому как если в выше упомянутой таблице статистики нет ни одной записи, mysql_num_rows(mysql_query(ваш код)) // = 0 в любом случае
 
 Top
Мелкий Супермодератор
Отправлено: 11 Апреля, 2013 - 15:59:54
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Ja_kazanova пишет:
Потому как если в выше упомянутой таблице статистики нет ни одной записи, mysql_num_rows(mysql_query(ваш код)) // = 0 в любом случае

Докажите показав, как пробовали. Это не так для предложенного запроса и структуры таблиц. В результате будут все опросы, в которых не участвовал пользователь. Если ни в одном не участвовал - все опросы.
Я уверен, что мой запрос вы изменили (что логично), но не в том месте.

PS: которая из 3 таблиц - статистика? undefined variable


-----
PostgreSQL DBA
 
 Top
Ja_kazanova
Отправлено: 11 Апреля, 2013 - 16:30:05
Post Id



Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Апр. 2013  


Помог: 0 раз(а)




Мелкий пишет:
Ja_kazanova пишет:
Потому как если в выше упомянутой таблице статистики нет ни одной записи, mysql_num_rows(mysql_query(ваш код)) // = 0 в любом случае

Докажите показав, как пробовали. Это не так для предложенного запроса и структуры таблиц. В результате будут все опросы, в которых не участвовал пользователь. Если ни в одном не участвовал - все опросы.
Я уверен, что мой запрос вы изменили (что логично), но не в том месте.

PS: которая из 3 таблиц - статистика? undefined variable

Право, Вы слишком высокого мнения о себе)
У меня нет ни времени, ни смысла, ни желания спорится с Вами, милейший. По сему в кратко и по сути.
Ничего и не пришлось изменять коме <> на NOT IN в своем же посте (№ 1), что в свою очередь схоже с циклами foreach, for, while в php.
Теперь залейте все предоставленные мной таблицы и сосчитайте количество не голосованых пользователем опросов при условии, что та самая таблица статистики залита но пуста то есть, не содержит не одной записи.
Результатом выполнения ниже представленного кода при условии подстановки Вашего куска
PHP:
скопировать код в буфер обмена
  1.  
  2. echo mysql_num_rows(mysql_query(ваш код)); // возвратит 0 не глядя на то что, опросы таки имеются в ассортименте
  3.  

Но если сосчитать их с помощью подстановки моего кода - будет возвращено верное количество строк.
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. echo mysql_num_rows(mysql_query("SELECT * FROM `ac_opros` WHERE `time_end` > UNIX_TIMESTAMP() AND IF((SELECT COUNT(*) FROM `ac_opros_variant_set`) > 0, `id` NOT IN (SELECT `id_file` FROM `ac_opros_variant_set` WHERE ".(isset($user -> person)?"`id_user` = '{$user -> id}' OR ":" `open` = '1' AND")." `ip` = '".$_SERVER['REMOTE_ADDR']."'))")); // = Верное количество не голосованных опросов
  4.  
  5.  

`ac_opros` - сам вопрос и его описание,
`ac_opros_variant` - варианты ответов,
`ac_opros_variant_set` - собственно та самая статистика, которую Вы, как ни странно в упор не заметили.

(Отредактировано автором: 11 Апреля, 2013 - 16:37:24)

 
 Top
Мелкий Супермодератор
Отправлено: 11 Апреля, 2013 - 16:56:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Ja_kazanova пишет:
`ac_opros_variant_set` - собственно та самая статистика, которую Вы, как ни странно в упор не заметили.
Ja_kazanova пишет:
Учет ответов        */        CREATE TABLE IF NOT EXISTS `ac_opros_variant_set`

Ja_kazanova пишет:
Таблица статистических опросов        */        CREATE TABLE IF NOT EXISTS `ac_opros`

Под словом "статистика" вы могли подразумевать как ту, так и другую.

Ja_kazanova пишет:
Теперь залейте все предоставленные мной таблицы и сосчитайте количество не голосованых пользователем опросов при условии, что та самая таблица статистики залита но пуста то есть, не содержит не одной записи.

PHP:
скопировать код в буфер обмена
  1. $rDB = new PDO('mysql:host=127.0.0.1;dbname=tests', 'root', 'dev',
  2.                                                 array(
  3.                                                         PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,
  4.                                                         PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8",
  5.                                                         PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
  6.                                                         ));
  7. $rDB->exec("DROP TABLE IF EXISTS `ac_opros_variant`, `ac_opros_variant_set`;");
  8. $rDB->exec("DROP TABLE IF EXISTS `ac_opros`;");
  9. $sCreateTables = <<<SQL
  10.        /*
  11.                 Таблица статистических опросов
  12.         */
  13.         CREATE TABLE IF NOT EXISTS `ac_opros`
  14.         (
  15.                 `id` SERIAL,
  16.                 `time` bigint UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Время создания',
  17.                 `time_alter` bigint UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Время        последнего изминения',
  18.                 `time_end` bigint UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Время окончания опроса',
  19.                 `name` varchar(128) NOT NULL DEFAULT '' COMMENT 'Заголовок опроса',
  20.                 `opis` varchar(1024) NOT NULL DEFAULT '' COMMENT 'Текст описания',
  21.                 `open` SET('0', '1') NOT NULL DEFAULT '0' COMMENT 'Возможность голосовать. 0 - пользователи, 1 - пользователи и гости',
  22.                 PRIMARY KEY (`id`),
  23.                 UNIQUE KEY (`name`),
  24.                 KEY (`time`, `time_alter`, `time_end`)
  25.         ) ENGINE InnoDB CHARACTER SET UTF8 COLLATE utf8_general_ci;
  26.         /*
  27.                 Варианты ответов
  28.         */
  29.         CREATE TABLE IF NOT EXISTS `ac_opros_variant`
  30.         (
  31.                 `id` SERIAL,
  32.                 `time_alter` bigint UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Время последнего ответа',
  33.                 `id_file` bigint UNSIGNED NOT NULL DEFAULT '0' COMMENT 'ID новости',
  34.                 `name` varchar(128) NOT NULL DEFAULT '' COMMENT 'Вариант ответа',
  35.                 PRIMARY KEY (`id`, `name`),
  36.                 FOREIGN KEY (`id_file`) REFERENCES `ac_opros` (`id`)
  37.                 ON DELETE RESTRICT ON UPDATE CASCADE
  38.         ) ENGINE InnoDB CHARACTER SET UTF8 COLLATE utf8_general_ci;
  39.         /*
  40.                 Учет ответов
  41.         */
  42.         CREATE TABLE IF NOT EXISTS `ac_opros_variant_set`
  43.         (
  44.                 `id` SERIAL,
  45.                 `id_file` bigint UNSIGNED NOT NULL DEFAULT '0' COMMENT 'ID опроса',
  46.                 `id_variant` bigint UNSIGNED NOT NULL DEFAULT '0' COMMENT 'ID варианта опроса',
  47.                 `id_user` bigint UNSIGNED NOT NULL DEFAULT '0' COMMENT 'ID голосовавшего',
  48.                 `time` bigint UNSIGNED NOT NULL DEFAULT '0' COMMENT 'Время ответа',
  49.                 `browser` varchar(32) NOT NULL DEFAULT '' COMMENT 'Название браузера',
  50.                 `version` varchar(32) NOT NULL DEFAULT '' COMMENT 'Версия браузера',
  51.                 `ip` varchar(32) NOT NULL DEFAULT '' COMMENT 'IP голосовавшего',
  52.                 PRIMARY KEY (`id`),
  53.                 KEY (`time`, `id_user`, `ip`),
  54.                 FOREIGN KEY (`id_file`) REFERENCES `ac_opros` (`id`)
  55.                 ON DELETE RESTRICT ON UPDATE CASCADE,
  56.                 FOREIGN KEY (`id_variant`) REFERENCES `ac_opros_variant` (`id`)
  57.                 ON DELETE RESTRICT ON UPDATE CASCADE
  58.         ) ENGINE InnoDB CHARACTER SET UTF8 COLLATE utf8_general_ci;
  59. SQL;
  60. $rDB->exec($sCreateTables);
  61.  
  62. $sFillTables = <<<SQL
  63. INSERT INTO `tests`.`ac_opros` (`id` ,
  64. `time` ,
  65. `time_alter` ,
  66. `time_end` ,
  67. `name` ,
  68. `opis` ,
  69. `open`
  70. ) VALUES (1 , '1365687738', '1365687738', '1365697738', 'тест1', 'описание теста1', '1'),
  71. (2 , '1365687738', '1365687738', '1365697738', 'тест2', 'описание теста2', '1'),
  72. (3 , '1365687738', '1365687738', '1365697738', 'тест3', 'описание теста3', '1'),
  73. (4 , '1365687738', '1365687738', '1365697738', 'тест4', 'описание теста4', '1'),
  74. (5 , '1365687738', '1365687738', '1365697738', 'тест5', 'описание теста5', '1');
  75.  
  76. INSERT INTO `tests`.`ac_opros_variant` (
  77. `time_alter` ,
  78. `id_file` ,
  79. `name`
  80. ) VALUES
  81. ('1365687738', '1', 'ответ1-1'),
  82. ('1365687738', '1', 'ответ1-2'),
  83. ('1365687738', '2', 'ответ2-1'),
  84. ('1365687738', '2', 'ответ2-2'),
  85. ('1365687738', '3', 'ответ3-1'),
  86. ('1365687738', '3', 'ответ3-2');
  87. /* не имеет значения на данном этапе, т.к. в условии задачи этого условия не было*/
  88.  
  89. INSERT INTO `tests`.`ac_opros_variant_set` (`id` ,
  90. `id_file` ,
  91. `id_variant` ,
  92. `id_user` ,
  93. `time` ,
  94. `browser` ,
  95. `version` ,
  96. `ip`
  97. )
  98. VALUES (NULL , '1', '1', '1', '1365687738', 'example', '0.1', '127.0.0.1'
  99. );
  100. SQL;
  101. $rDB->exec($sFillTables);
  102.  
  103. $rPrepareUserQuestions = $rDB->prepare("SELECT `ac_opros`.* FROM `ac_opros` LEFT JOIN `ac_opros_variant_set` ON id_user=? AND `ac_opros`.id=`id_file` WHERE `id_file` IS NULL");
  104.  
  105. $rPrepareUserQuestions->execute(array(1));
  106. echo 'Непройденных опросов у пользователя 1: '.$rPrepareUserQuestions->rowCount(),PHP_EOL;
  107. $rPrepareUserQuestions->execute(array(2));
  108. echo 'Непройденных опросов у пользователя 2: '.$rPrepareUserQuestions->rowCount();

Цитата:
Непройденных опросов у пользователя 1: 4
Непройденных опросов у пользователя 2: 5


Ja_kazanova пишет:
не пришлось изменять коме <> на NOT IN

Мелкий пишет:
Я уверен, что мой запрос вы изменили (что логично), но не в том месте.

(Добавление)
Ja_kazanova пишет:
хочется сделать все красиво и правильно, помогите, а)

Ja_kazanova пишет:
Спасибо но, JOIN(ов) я стараюсь избегать

Мелкий пишет:
Отчего же?

Ja_kazanova пишет:
У меня нет ни времени, ни смысла, ни желания спорится с Вами, милейший.

Так вы определитесь, хотите вы делать красиво и правильно - для этого нужна дискуссия.
Подзапросы, особенно в mysql до 5.6 - штука медленная. Заметно медленнее джойнов. Запустите свой запрос на мелкой табличке, ну этак, с 10тыс опросов и с 100тыс ответов пользователей. Мелкая же табличка, не правда ли?

Ну а если вы передумали делать правильно - то тема действительно закрыта, приношу извинения, что напрасно трачу ваше время. С радостью подскажем в своё время, почему выборки тормозят.


-----
PostgreSQL DBA
 
 Top
Ja_kazanova
Отправлено: 11 Апреля, 2013 - 17:30:55
Post Id



Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Апр. 2013  


Помог: 0 раз(а)




Мелкий, если в первом посте ваш код тогда я с вами полностью согласен. Но постольку поскольку там именно мой код без использования излюбленного вами JOIN(а) и вопрос как таковой уже давно исчерпан, тогда к чему эти танцы с бубном? Кому, чем и главное что вы пытаетесь доказать? Перед вложенным поиском строк имеет место проверка на заполненность которая была произведена посредством связки IF/COUNT, что и было сделано мной. И к чему те километры кода которые вы выложили в пред ведущем посте демонстрируя этим самым свою не компетентность. Ибо не нужен гектар кода там, где достаточно одного корректного предложения. Это мое имхо + тесты на производительность тоже на моей стороне)
Всего Вам доброго, прощевайте)
 
 Top
esterio
Отправлено: 11 Апреля, 2013 - 18:10:01
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


Помог: 127 раз(а)




Ja_kazanova
Думаю Вам не стоит спорить с Мелкий. По сути
заменить на уже бистрее и проще. И если query вернет false, то словите error. И вместо таких замеров сделайте EXPLAIN - он Вам подскажет где Вы ошиблись.
 
 Top
Мелкий Супермодератор
Отправлено: 11 Апреля, 2013 - 21:14:28
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Ja_kazanova пишет:
Кому, чем и главное что вы пытаетесь доказать?

Ничего не пытаюсь доказать, я пытаюсь выяснить вашу аргументацию вот этого:
Ja_kazanova пишет:
Спасибо но, JOIN(ов) я стараюсь избегать

Разумеется, я могу чего-то не знать, но ваша категоричная позиция меня удивляет.

Ja_kazanova пишет:
Перед вложенным поиском строк имеет место проверка на заполненность которая была произведена посредством связки IF/COUNT, что и было сделано мной.

Ну и какая проблема? Есть как минимум ещё тройка способов это сделать по-разному.

Ja_kazanova пишет:
к чему те километры кода

Иллюстрация работоспособности, ведь вы утверждаете:
Ja_kazanova пишет:
возвратит 0 не глядя на то что, опросы таки имеются в ассортименте

Что не соотносится с действительностью. Если вы обратите внимание, 99% кода - это создание таблиц и их заполнение тестовой информацией.
Я решил, что полный автономный пример достаточно проиллюстрирует "Теперь залейте все предоставленные мной таблицы ..."


Ответьте всё-таки на вопрос, почему вы избегаете джойнов? Это инструмент, позволяющей базе делать то, что делать она умеет хорошо. Это единственное, что я хочу от вас узнать.


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Администрирование БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB