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

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

01.08.2014, 18:14. Показов 2116. Ответов 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru