Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
 Аватар для TexSV
16 / 16 / 9
Регистрация: 17.04.2014
Сообщений: 74

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

01.08.2014, 18:14. Показов 2171. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru