Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 1
Регистрация: 08.02.2013
Сообщений: 106
Interbase

Дублирование строк в форме

31.10.2016, 16:46. Показов 850. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет) У меня появилась проблемка, попробую, как можно точнее, описать ее.
Есть 2 таблицы в базе Interbase, Firebird, допустим:

ID Имя Возраст
1 Имя1 12
2 Имя2 52
3 Имя3 13

И есть таблица:

Id_имён рандомное_число
1 23
2 11
1 15

При выводе их на форму в виде "ID Имя Возраст Рандомное_число" строки дублируются, не могу допереть, каким образом соединить рандомные числа в одну ячейку через запятую. Как мне быть?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.10.2016, 16:46
Ответы с готовыми решениями:

Дублирование записи в подчиненной форме
Существует главная форма, в ней подчиненная ленточная форма с наборами значений для данных в главной форме (один ко многим). По нажатию...

Проверка на дублирование записи в форме
Очень нужно: Возможно ли в программе Access 2003 в форме, в поле задать условие на значение для избежания ввода одинаковых значений? если...

Отчет с параметром и дублирование записей в форме
После добавления в таблицу Курсы поля Категория курсов - тип поле со списком с возможностью сохранять несколько значений, в форме Курсы...

4
Фрилансер
Эксперт PythonЭксперт JSЭксперт PHP
 Аватар для Azdeman
1871 / 1362 / 604
Регистрация: 12.01.2011
Сообщений: 5,470
01.11.2016, 02:42
Цитата Сообщение от Rommqa772 Посмотреть сообщение
строки дублируются
Код бы видеть.
0
0 / 0 / 1
Регистрация: 08.02.2013
Сообщений: 106
01.11.2016, 05:19  [ТС]
Вот он. В параметре "nu" может быть несколько человек, из-за чего строки дублируются на выходе.
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
// Разбор основных параметров
$page = get_integer('page');  // Номер запрашиваемой страницы
$limit = get_integer('rows'); // Количество запрашиваемых записей
$sord = get_p('sord');  // Направление сортировки
$sidx = get_p('sidx'); // Sorting. colModel{ index: ...}
if( empty($sidx)) $sidx = 'ndoc';
 
$f_emp = get_utf8('f_emp');
// ================================================================================================
// Готовим условие where
$where = array();
    $where[] = "n_doc.doc >0 ";
    if ($f_emp != '') {
    $f_emp = bind_ibase_string( pcase($f_emp).'%');
    $where[] = "n_doc.ndoc like {$f_emp}";
    }
$where_usl= implode(' and ', $where);
 
//=================================
// если не указано, то выдаем пустой набор сразу
if (count($where)==0) {
    $data = array(
        'page' => 1, // current page of the query
        'total' => 1, // total pages for the query
        'records' => 0, // total number of records for the query
        'rows' => array(), // an array that contains the actual data
    );
    header("Content-type: text/json;charset=utf-8");
    $json = new Services_JSON();
    echo $json->encode($data);
    return;
}
 
// ===============================================================================================
// суммарное кол-во записей в таблице
$count = ibase_select_value("select count(*)
        from n_doc
        left join n_spz on n_spz.spz = n_doc.spz
 
        where ".$where_usl);
// ===============================================================================================
// Рассчитаем сколько всего страниц займут данные в БД
if( $count > 0 && $limit > 0)
    $total_pages = ceil($count/$limit);
else
    $total_pages = 0;
if ($page > $total_pages) $page=$total_pages;
$start = $limit*$page - $limit;  // Рассчитываем стартовое значение для LIMIT запроса
if($start < 0) $start = 0; // Зашита от отрицательного значения
$data = array(
    'page' => $page, // current page of the query
    'total' => $total_pages, // total pages for the query
    'records' => $count, // total number of records for the query
    'rows' => array(), // an array that contains the actual data
);
 
// ===============================================================================================
// Выбираем данные
 
    $sql = "select first {$limit} skip {$start} n_doc.doc,n_doc.ndoc, n_doc.QUIT,username, 
    n_doc.QUITDATE, n_doc.ARCHIV, n_doc.LVN, n_doc.PREDVK, n_mpp.mpp, n_mps.kmp, n_spz.spz, n_doc_nu.nu, 
    n_mpp.dip, n_mpp.snl, n_mpp.tel, n_otd.otd
        from n_doc
        left join n_spz on n_spz.spz = n_doc.spz
        left join n_mpp on n_mpp.mpp = n_doc.mpp
        left join n_mps on n_mps.kmp = n_doc.doc_plot
        left join n_otd on n_otd.otd = n_mps.otd
        left join n_doc_nu on n_doc_nu.doc = n_doc.doc
        
            where " . $where_usl . "
            order by {$sidx} {$sord} ";
$all = ibase_select_all($sql);
// ===============================================================================================
// Формируем входной массив
$rowcount=0;
foreach($all as $row) {
  $otd = intval(nvl($row['OTD']));
  $spz = intval(nvl($row['SPZ']));
  $nu = intval(nvl($row['NU']));
    $doc = intval(nvl($row['DOC']));
  $ndoc = nvl($row['NDOC']);
  $notd = N_OTD::getObject($otd)->NOTD;
  $nspz = N_SPZ::getObject($spz)->NSPZ;
 
  if (intval(nvl($row['QUIT']))>0) {
    $quit = sql2d(nvl($row['QUITDATE']));
    $color = 'red';
  } else {
    $quit='';
    $color = 'black';
  }
  $arch = (intval(nvl($row['CCD_ARCHIV']))==1) ? '+' : '';
  $lvn = (intval(nvl($row['CCD_LVN']))==1) ? '+' : '';
  $predvk = (intval(nvl($row['CCD_PREDVK']))==1) ? '+' : '';
  
  
  $data['rows'][$rowcount]['id'] = $doc;
  $data['rows'][$rowcount]['cell'][] = iconv('cp1251','utf-8',$ndoc);
  $data['rows'][$rowcount]['cell'][] = iconv('cp1251','utf-8',$nspz);
  $data['rows'][$rowcount]['cell'][] = iconv('cp1251','utf-8',$nu);
  $data['rows'][$rowcount]['cell'][] = iconv('cp1251','utf-8',nvl($row['USERNAME']));
  $data['rows'][$rowcount]['cell'][] = iconv('cp1251','utf-8',"<span style=\"color:{$color};\">" .nvl($quit). "&nbsp;</span>");
  $data['rows'][$rowcount]['cell'][] = iconv('cp1251','utf-8',$doc);
    $data['rows'][$rowcount]['cell'][] = iconv('cp1251','utf-8',intval(nvl($row['MPP']))>0) ? '+' : '';
    $data['rows'][$rowcount]['cell'][] = iconv('cp1251','utf-8',intval(nvl($row['KMP']))>0) ? '+' : '';
  $data['rows'][$rowcount]['cell'][] = iconv('cp1251','utf-8',intval(nvl($row['ARCHIV'])));
  $data['rows'][$rowcount]['cell'][] = iconv('cp1251','utf-8',intval(nvl($row['LVN'])));
  $data['rows'][$rowcount]['cell'][] = iconv('cp1251','utf-8',intval(nvl($row['PREDVK'])));
  $data['rows'][$rowcount]['cell'][] = iconv('cp1251','utf-8',$row['DIP']);
  $data['rows'][$rowcount]['cell'][] = iconv('cp1251','utf-8',$row['SNL']);
  $data['rows'][$rowcount]['cell'][] = iconv('cp1251','utf-8',$row['TEL']);
 
 
  $rowcount++;
}
header("Content-type: text/json;charset=utf-8");
$json = new Services_JSON();
echo $json->encode($data);
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
01.11.2016, 13:52
сначала собирайте записи в массив по ID, потом выводите.
PHP
1
2
3
4
5
6
7
8
$records = array();
foreach($all as $row) {
    ...
    $records[$row['Id_имён']][] = $row['рандомное_число'];
}
...
foreach($records as $id => $numbers)
    echo $id, ' => ', join(', ', $numbers), PHP_EOL;
1
0 / 0 / 1
Регистрация: 08.02.2013
Сообщений: 106
02.11.2016, 09:56  [ТС]
Спасибо) То, что надо)

Добавлено через 11 часов 15 минут
Что-то я его всячески тыркаю. Он начинает работать, разлиновка таблицы есть, но данных не выводит никаких :C
$doc - ид имен, $nu - рандомное число из прошлых постов
Что может быть? :C

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
// Формируем входной массив
$rowcount=0;
$records = array('select n_doc_nu.nu from n_doc_nu where n_doc_nu.doc = n_doc.doc');
foreach($all as $row) {
  $spz = intval(nvl($row['SPZ']));
  $nu = intval(nvl($row['NU']));
    $doc = intval(nvl($row['DOC']));
    $records[$row['DOC']][]=$row['NU'];
  $ndoc = nvl($row['NDOC']);
  $nspz = N_SPZ::getObject($spz)->NSPZ;
 
  if (intval(nvl($row['QUIT']))>0) {
    $quit = sql2d(nvl($row['_QUITDATE']));
    $color = 'red';
  } else {
    $quit='';
    $color = 'black';
  }
  $arch = (intval(nvl($row['ARCHIV']))==1) ? '+' : '';
  $lvn = (intval(nvl($row['LVN']))==1) ? '+' : '';
  $predvk = (intval(nvl($row['PREDVK']))==1) ? '+' : '';
  
  
  
 // $sql = "select n_doc_nu.nu from n_doc_nu where n_doc_nu.doc = {$doc}";
 
  
  $data['rows'][$rowcount]['id'] = $doc;
  $data['rows'][$rowcount]['cell'][] = iconv('cp1251','utf-8',$ndoc);
  $data['rows'][$rowcount]['cell'][] = iconv('cp1251','utf-8',$nspz);
 // $data['rows'][$rowcount]['cell'][] = iconv('cp1251','utf-8',$records);
  $data['rows'][$rowcount]['cell'][] = iconv('cp1251','utf-8',nvl($row['USERNAME']));
  $data['rows'][$rowcount]['cell'][] = iconv('cp1251','utf-8',"<span style=\"color:{$color};\">" .nvl($quit). "&nbsp;</span>");
  $data['rows'][$rowcount]['cell'][] = iconv('cp1251','utf-8',$doc);
    $data['rows'][$rowcount]['cell'][] = iconv('cp1251','utf-8',intval(nvl($row['MPP']))>0) ? '+' : '';
    $data['rows'][$rowcount]['cell'][] = iconv('cp1251','utf-8',intval(nvl($row['KMP']))>0) ? '+' : '';
  $data['rows'][$rowcount]['cell'][] = iconv('cp1251','utf-8',intval(nvl($row['ARCHIV'])));
  $data['rows'][$rowcount]['cell'][] = iconv('cp1251','utf-8',intval(nvl($row['LVN'])));
  $data['rows'][$rowcount]['cell'][] = iconv('cp1251','utf-8',intval(nvl($row['PREDVK'])));
 
 
  $rowcount++;
}
foreach ($records as $doc => $nu)
  echo $doc, '=>', join(',', $nu), PHP_EOL;
//  $data['rows'][$rowcount]['cell'][] = iconv('cp1251','utf-8',$nu);
$data['userdata']['NU'] = iconv('cp1251','utf-8',nvl($records));  
 
header("Content-type: text/json;charset=utf-8");
$json = new Services_JSON();
echo $json->encode($data);
Добавлено через 5 часов 12 минут
Можно же как-то это дело через implode() заделать...

Добавлено через 22 минуты
Все, решил вопрос
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.11.2016, 09:56
Помогаю со студенческими работами здесь

Дублирование группы при раскрытие в форме выбора
Подскажите, почему дублируется группа. Группы дублируются на которую нажимаешь потом, когда все прощелкешь нормально начинает работать. ...

Дублирование строк
Имеется таблица: ID, ID_product, count Пример заполнения: 1, 12457, 7 Требуется получить количество строк равных значению в поле...

Дублирование строк
Добрый день! Я не очень силен в Vbasic и мне поставили непосильную задачу по форматирвоание таблиц. Подскажите, пожалуйста, как можно...

Запрос на дублирование строк
Доброго времени суток. Нужна помощь в запросе, есть таблица. Мне нужно сделать запрос так, чтобы строки дублировались в запросе по данным...

Автоматическое дублирование строк
Помогите решить проблему с Excell - нужен скрипт, макрос который должен дублировать строки с данными до ближайшей заполненной строки....


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
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. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru