Аватар для TexSV
16 / 16 / 9
Регистрация: 17.04.2014
Сообщений: 74

Дублирование информации при выводе данных - исправить код

01.08.2014, 18:14. Показов 2132. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, написал код вывода данных, хочу получить график работы:
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
        echo '<th>ФИО </th>'; 
        echo '<th>Время работы </th>';
        echo '<th>Кабинет </th>';
        $data_tek = date("Ymd");
        $result_spec = mysql_query ('SELECT kadrispec.id_kadrispec, kadrispec.title FROM kadrispec, kadrigraphic 
            WHERE kadrigraphic.id_kadrispec=kadrispec.id_kadrispec and kadrigraphic.day='.$data_tek.'')
            or die ("<p>Не получилось : (".mysql_error()."</p>");
        While($row = mysql_fetch_array($result_spec)) {
            echo '<div class="1">';
            echo $row[1]; 
            echo '</div>';
            $spec = $row['id_kadrispec'];
        $result_graphic = mysql_query('SELECT kadripersonal.FIO, kadrigraphic.start, kadrigraphic.end, kadrigraphic.number FROM kadripersonal, kadrigraphic
            WHERE kadripersonal.id_kadrispec='.$spec.' and kadrigraphic.day='.$data_tek.' and kadripersonal.id_kadripersonal=kadrigraphic.id_kadripersonal')
            or die("<p>Не получилось :(".mysql_error()."</p>");
        While ($row_gr = mysql_fetch_array($result_graphic)) {
                echo '<div class="content">';
                echo  $row_gr[0];
                echo 'с ', $row_gr[1],' до ',$row_gr[2];
                echo $row_gr[3];    
                echo '</div>';
                } 
             }
         mysql_close($db);  
    ?>

Все выводит правильно, за исключением одного. При совпадении id_kadrispec у двух и более сотрудников происходит дублирование информации, выводимой на сайте.
Т.е., как должно выводиться:
1)название специльности №1
2) ФИО
1)название специльности №2
2) ФИО
А при совпадении id_kadrispec происходит следующее:
1)название специльности №1
2)ФИО
2)ФИО
1)название специльности №1
2)ФИО
2)ФИО

Выделенное жирным шрифтом лишнее. Скорее всего намудрил с циклами. Помогите пожалуйста.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.08.2014, 18:14
Ответы с готовыми решениями:

Дублирование записей при выводе в дерево
Помогите, пожалуйста! Вывожу значения в дерево вот так, но почему-то каждая строка дублируется. Проблема 100% в цикле, подскажите, в чем...

При выводе из файла происходит дублирование информации
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;windows.h&gt; using namespace std; int main() { setlocale(0,&quot;&quot;); ...

Дублирование новостей при выводе
Здравствуйте. На сайте предполагается вывод новостей. Для этого был создан инфоблок с определенными свойствами. Одно из свойств - список...

10
 Аватар для KeyGen
388 / 295 / 21
Регистрация: 07.08.2011
Сообщений: 790
Записей в блоге: 1
01.08.2014, 23:10
echo столько раз не нужно - запиши все в переменную и одни раз выведи.
$data_tek = date("Ymd"); - это странно, в таблице используй тип date... я так понимаю у тебя там сторка.
mysql_query - не юзай посмотри на PDO
А при совпадении id_kadrispec - убрать дублирование можно GROUP BY id_kadrispec
FROM kadrispec, kadrigraphic - юзай join
0
 Аватар для TexSV
16 / 16 / 9
Регистрация: 17.04.2014
Сообщений: 74
02.08.2014, 13:56  [ТС]
Спасибо за ответ. Подкорректировал немного код, почитал про JOIN, попытался их встроить в запрос(не знаю, правильно ли сделал):
Кликните здесь для просмотра всего текста
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
        $title='ФИО'.' Время работы'.' Кабинет';
        echo $title;
        $data_tek = date("Ymd");
        $result_spec = mysql_query ('SELECT kadrispec.id_kadrispec, kadrispec.title FROM kadrispec 
                                    JOIN kadrigraphic 
                                    ON kadrigraphic.id_kadrispec=kadrispec.id_kadrispec and kadrigraphic.day='.$data_tek.' 
                                    GROUP BY kadrigraphic.id_kadrispec')
        or die ("<p>Не получилось : (".mysql_error()."</p>");
        While($row = mysql_fetch_array($result_spec)) {
            $mass='<div class="1">'.$row[1].'</div>';
            echo $mass;
            $spec = $row['id_kadrispec'];
            $result_graphic = mysql_query('SELECT kadripersonal.FIO, kadrigraphic.start, kadrigraphic.end, kadrigraphic.number FROM kadripersonal
                                      JOIN kadrigraphic
                                      ON kadripersonal.id_kadrispec='.$spec.' and kadrigraphic.day='.$data_tek.' and kadripersonal.id_kadripersonal=kadrigraphic.id_kadripersonal')
            or die("<p>Не получилось :(".mysql_error()."</p>");
        While ($row_gr = mysql_fetch_array($result_graphic)) {
                $mass_name='<div class="content">'.$row_gr[0].' с '. $row_gr[1].' до '.$row_gr[2].$row_gr[3].'</div>';
                echo $mass_name;
            } 
        }
        mysql_close($db);  
    ?>

Сделал группировку, дублирование пропало, но теперь сортирует профессию не по алфавиту и это тоже проблема.
Насчет PDO: услышал совсем недавно, теперь, наверное, буду пользоваться этим методом описания.
$data_tek = date("Ymd"); - необходимо для проверки на время, т.е. каждый день информация должна обновляться, если, в силу каких-то обстоятельств этого не произошло, то ничего не на экране показано не будет. Т.е. происходит сравнение со строкой в таблице.
0
 Аватар для KeyGen
388 / 295 / 21
Регистрация: 07.08.2011
Сообщений: 790
Записей в блоге: 1
03.08.2014, 01:08
В mysql можно отсортировать: order kadrispec.title
Вот тебе проверка на сегодняшний день ... WHERE date(day)=date(NOW())
1
 Аватар для TexSV
16 / 16 / 9
Регистрация: 17.04.2014
Сообщений: 74
05.08.2014, 23:23  [ТС]
Спасибо, про время не знал, пришлось выдумывать условие
0
06.08.2014, 00:59

Не по теме:

Цитата Сообщение от KeyGen Посмотреть сообщение
WHERE date(day)=date(NOW())
MySQL кажется не умеет функциональных индексов? - Такое круто проворачивать в PostgreSQL =)

В случае MySQL стоит создать отдельную колонку со значением date(day) (которое можно автоматически прописывать триггером) и выбирать по ней (а на ней, логично, поставить индекс).

Впрочем я со своей оптимизацией кажется не в тему..

0
 Аватар для TexSV
16 / 16 / 9
Регистрация: 17.04.2014
Сообщений: 74
06.08.2014, 09:59  [ТС]
так и сделал, сравниваю уже созданный столбец с date(NOW())
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
06.08.2014, 11:01
Цитата Сообщение от Tatikoma Посмотреть сообщение
(которое можно автоматически прописывать триггером
триггер для даты это несколько перебор, имхо. Если операции с датой выполняется в текущем времени (>= 1970 г.), то имеет смысл использовать тип поля TIMESTAMP, у которого есть отличный флаг ON_UPDATE_CURRENT_TIMESTAMP, а при записи новой строки он автоматом подставляет значение NOW()
0
F́́́́́́́ŕ́́́́́́́é́́́ ́ak
 Аватар для Tatikoma
260 / 224 / 109
Регистрация: 07.07.2014
Сообщений: 965
06.08.2014, 13:22
Цитата Сообщение от KOPOJI Посмотреть сообщение
триггер для даты это несколько перебор, имхо. Если операции с датой выполняется в текущем времени (>= 1970 г.), то имеет смысл использовать тип поля TIMESTAMP, у которого есть отличный флаг ON_UPDATE_CURRENT_TIMESTAMP, а при записи новой строки он автоматом подставляет значение NOW()
С чего вы взяли что у ТС в колонке day находится текущая метка времени?.. - Там может быть любая дата, которую ему нужно обрезать..
Вопрос в том, что для такой выборки - ему скорее всего лучше создать отдельную колонку, как он и сделал.
Другое дело в том, что заполнять эту колонку можно автоматически. Триггерами. Не текущей датой, а обрезанным значением из колонки day.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
06.08.2014, 13:29
Tatikoma, я лишь предположил.. ключевое слово "Если"
0
 Аватар для KeyGen
388 / 295 / 21
Регистрация: 07.08.2011
Сообщений: 790
Записей в блоге: 1
06.08.2014, 22:09
Tatikoma, вся и все оптимизировать не только гемор и трата времени но и не выполненая задача в сроки.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.08.2014, 22:09
Помогаю со студенческими работами здесь

Исправить ошибку в выводе информации в RichTextBox
Здравствуйте, у меня программа на С# в Windows Forms на тему &quot;Алгоритм Краскала&quot;. Я все реализовала, и работает вроде правильно, но...

Ошибка при выводе информации из БД
народ помогите при выводе информации из бд выдает вот такую ошибку: line 24=while ($row_articles = mysql_fetch_assoc...

При выводе информации из БД, выбивает ошибку
Привет. Пытаюсь вывести информацию из БД, но есть проблемка: В файле mysql.php написел следующий код, с помощью которого подключаюсь в...

Ошибки при выводе информации о поезде
САSE 7 должен выдавать по номеру поезда информацию о пункте назначения и времени прибытия,но она выдает это case 7: list =...

Представление информации при выводе запроса
Привет всем! Есть запрос --ВСЕГО ЗАОЧНИКОВ SELECT kaf,spec, Count(*) as kolvo FROM student st, kaf k, spec s, gruppa g where...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru