Форум программистов, компьютерный форум, киберфорум
VBScript/JScript/WSH/WMI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 17.09.2013
Сообщений: 26

Как из возвращаемых данных SQL-запроса создать многомерный массив?

29.07.2016, 10:55. Показов 1858. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добро дня!
Как из запроса SQL создать многомерный массив?
Есть запрос, который возвращает поля (Клиент, Дата, Ссылка.)
В результате может быть несколько записей под одному и тому же клиенту.
Их надо сгруппировать, то есть в массиве ключом должно быть имя клиента, примерно вот так

Code
1
2
3
4
5
6
7
array('Кличент1' = array('01012000'=array('Link1','Link2','Link3'),
                                     '01012001'=array('Link1','Link2','Link3'),                                                                
                                     ),
        'Кличент2' = array('01012000'=array('Link1','Link2','Link3'),
                                     '01012001'=array('Link1','Link2','Link3'),                                                                
                                     ),
        )
Все это должно работать на ASP, то есть реализовать нужно с помощью VBSCRIPT или JAVASCRIPT.
Очень нужна помощь знатоков!

Добавлено через 1 час 22 минуты
Неужели никто не может подсказать?
Очень срочно нужно...

Почитал, что есть альтернатива массивам Dictionary Object
И его можно использовать как то так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
SET RS=DB.Execute(sql)
  
  Dim dict
  Set dict = CreateObject("Scripting.Dictionary")
  
  Do While Not RS.EOF
  brief =  RS("Client").Value
  date =  RS("Date").Value
  
 
  RS.MoveNext
  Loop
Но у меня это не работает. И как тут сгруппировать по клиенту даты?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.07.2016, 10:55
Ответы с готовыми решениями:

Как создать многомерный массив?
типа Dim aArr ( C 20ю размерностями )?

Как создать многомерный массив?
Ребят я туплю. У меня есть слова. Первый - 1 подмассив 1 - 1 подмассив 2 - 1 подмассив 3 Второй - 2 подмассив 1 - 3...

Как создать многомерный массив?
Подскажите, пожалуйста, возможно ли задать многомерный массив в С, если заранее (на момент написания кода) не известно точное число...

3
2619 / 549 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
29.07.2016, 12:01
Можно организовать нужную структуру с помощью вложенных словарей.
Ключи словаря верхнего уровня - имена клиентов, элементы - ссылки на вложенные словари.
Ключи словаря нижнего уровня - даты, элементы - массивы строк.
Пример:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Dim objDict, objTemp, x
 
Set objDict = CreateObject("Scripting.Dictionary")
objDict.CompareMode = 1
Set objTemp = CreateObject("Scripting.Dictionary")
objTemp.CompareMode = 1
objDict.Add "Клиент1", objTemp
objTemp.Add "01012000", Array("Link1", "Link2", "Link3")
objTemp.Add "01012001", Array("Link10", "Link20", "Link30")
Set objTemp = CreateObject("Scripting.Dictionary")
objTemp.CompareMode = 1
objDict.Add "Клиент2", objTemp
objTemp.Add "01012000", Array("Link100", "Link200", "Link300")
objTemp.Add "01012001", Array("Link1000", "Link2000", "Link3000")
Set objTemp = Nothing
MsgBox "Клиент1" & vbNewLine & TypeName(objDict.Item("Клиент1")) & vbNewLine & TypeName((objDict.Item("Клиент1")).Item("01012000")) & vbNewLine & TypeName((objDict.Item("Клиент1")).Item("01012000")(0))
x = (objDict.Item("Клиент1")).Item("01012000")
MsgBox  "Клиент1 -> 01012000[0] + 01012001[2]" & vbNewLine & x(0) & vbNewLine & (objDict.Item("Клиент1")).Item("01012001")(2)
MsgBox  "Клиент2" & vbNewLine & TypeName(objDict.Item("Клиент2")) & vbNewLine & TypeName((objDict.Item("Клиент2")).Item("01012000")) & vbNewLine & TypeName((objDict.Item("Клиент2")).Item("01012000")(0))
x = (objDict.Item("Клиент2")).Item("01012000")
MsgBox  "Клиент2 -> 01012000[0] + 01012001[2]" & vbNewLine & x(0) & vbNewLine & (objDict.Item("Клиент2")).Item("01012001")(2)
Set objDict = Nothing
WScript.Quit 0
0
0 / 0 / 0
Регистрация: 17.09.2013
Сообщений: 26
29.07.2016, 12:33  [ТС]
Спасибо!
Уже нашел подобное

Visual Basic
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
Dim dict
Dim dict2
 
Set dict = CreateObject("Scripting.Dictionary")
Set dict2 = CreateObject("Scripting.Dictionary")
 
' Create a dictionary to be used as the "items" value for the main dictionary
dict2.Add "appid", "1"
dict2.Add "name", "alpha"
 
' Add it to the main dictionary as the item with Key of "1"
dict.Add "app1", dict2
 
' Clear the temp second dictionary
dict2.RemoveAll
 
' Add a new dictionary dimension for the second item
dict2.Add "appid", "2"
dict2.Add "name", "beta"
dict.Add "app2", dict2
 
' Loop through the main dictionary, and go through each item (sub-dictionary)
For Each key In dict.Keys%>
    <%=key%> - 
    <%For Each key2 In dict.Item(key).Keys%>
        <%=key2 & dict.Item(key).Item(key2)%> 
    <%Next%>
    <br />
<%Next%>
Применил к своей задаче вот так

Visual Basic
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
dim arr 
  arr  = rs.GetRows()
  
  dim cols
  cols = ubound(arr,1)
  dim rows
  rows = ubound(arr,2)
 
  dim x , y, z
 
  Set client = CreateObject("Scripting.Dictionary")
  Set data = CreateObject("Scripting.Dictionary")
  Set link = CreateObject("Scripting.Dictionary")
 
  for y = 0 to rows
    c = arr(0,y)  
    for x = 0 to rows
      if arr(0,x) = c then 
         d = arr(2,x)
         for z = 0 to rows
            u = arr(4,z)
            if arr(0,z) = c then
              if  arr(2,z) = d then
                link.Add u, "url" 
              end if 
            end if  
            
        next
        data.Add d, link 
        link.RemoveAll
      end if
    next
    if client.exists(c)then c = arr(0,y)  else client.Add c, data end if
    data.RemoveAll
  next    
  For Each key In client.Keys %>
  <%=key%>
    <% For Each key2 In client.Item(key).Keys %>
        <%=client.Item(key).Item(key2)%> 
    <% Next %>
  <% Next
Но у меня выводится только список клиентов, даты почему то не выводятся...
0
2619 / 549 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
29.07.2016, 12:56
megopozitiv, метод RemoveAll очищает содержимое словаря. В итоге у вас остаются ссылки на пустые словари link и data.

В циклах
Visual Basic
1
2
3
for x = 0 to rows
'...
next
Visual Basic
1
2
3
for y = 0 to rows
'...
next
вам надо на каждой итерации создавать новые экземпляры словарей link и data (соответственно).
Советую посмотреть на предложенный мной пример более внимательно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.07.2016, 12:56
Помогаю со студенческими работами здесь

Как создать многомерный массив с библиотекой Numpy
Чего хитрить, пытаюсь сделать самую простую нейронную сеть, основы собственно понятны, но появилась проблема при создании рандомных весов...

Как создать многомерный массив из двух обычных?
есть два массива: $personal_number= array( &quot;Вася&quot; =&gt; &quot;8864&quot;, &quot;Петя&quot; =&gt; &quot;3455&quot;, &quot;Саша&quot; =&gt; &quot;1221&quot;, ); и массив...

Как создать многомерный массив с ключом и заполнить его?
Доброго времени суток!! Помогите мне разобраться как составить много мерный массив То что я хочу получить в итоге(примерно) Это на...

Как создать динамический многомерный массив, чтобы индексация начиналась не с 0, а с 1?
Здравствуйте, можно-ли в PascalABC.NET создать многомерный динамический массив и что-бы индексация начиналась не с нуля ,а с еденици? ...

Сохранение результата запроса в многомерный массив
Имеется БД, с которой я запросом получаю все значения определенной таблицы. Затем я пытаюсь скопировать их в свой массив, но у меня ничего...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
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