Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Засунуть двумерный массив в базу 
:(
    Опции темы
MOTORIST
Дата 13.6.2009, 03:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 26.9.2008

Репутация: нет
Всего: нет



Есть база с заголовками столбцов:str, pos0, pos1, pos2,....
И есть двумерный массив:
Код

Array
(
    [0] => Array
        (
            [0] => 1
            [1] => Январь
            [2] => 01.02.2010
            [...] =>........
            [...] =>........
        )

    [1] => Array
        (
            [0] => 2
            [1] => Март
            [2] => 02.02.2009
            [...] =>........
            [...] =>........
        )

    [...] => Array
        (
            [0] => 3
            [1] => Май
            [2] => 03.02.2009
            [...] =>........
            [...] =>........
        )
)


Количество членов  массива разное ,т.е может быть как 3, 4, так и 10 .... членов (на втором уровне тоже).
Как наиболее рационально засунуть значения этого массива в базу данный?

Я немного не правильно выразился, нужно в db засунуть не массив, а значения массива, т.е. раскидать их по базе данных.

P.S. Заранее спасибо за помощь.

Это сообщение отредактировал(а) MOTORIST - 13.6.2009, 12:58
PM   Вверх
lukas
Дата 13.6.2009, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



MOTORIST, используй функции serialize и unserialize (http://php.su/functions/?serialize).

Это сообщение отредактировал(а) lukas - 13.6.2009, 09:17


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
MOTORIST
Дата 13.6.2009, 12:32 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 26.9.2008

Репутация: нет
Всего: нет



Каким образом использовать эти функции...?
PM   Вверх
icewind
Дата 13.6.2009, 12:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 11.4.2009
Где: Ростов-на-Дону

Репутация: 20
Всего: 20



Код

$to_database = serialize($2dArray);
//Insert query

//Select query
$new2dArray = unserialize(mysql_result(....));



--------------------
user posted image
PM MAIL Skype   Вверх
ksnk
Дата 13.6.2009, 12:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



MOTORIST, искать по этому массиву не надо? Какого объема этот массив (100 строк, 1000,  больше)?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
MOTORIST
Дата 13.6.2009, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 26.9.2008

Репутация: нет
Всего: нет



Я немного не правильно выразился, нужно в db засунуть не массив, а значения массива, т.е. раскидать их по базе данных.
Массив имеет два уровня вложенности. На первом уровне членов не более 1000, на втором не более 20ти.

Это сообщение отредактировал(а) MOTORIST - 13.6.2009, 12:55
PM   Вверх
ksnk
Дата 13.6.2009, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



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

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



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
MOTORIST
Дата 13.6.2009, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 26.9.2008

Репутация: нет
Всего: нет



В таблице будет 20 столбцов pos1, pos2, pos3......

Но в массиве на втором уровне не всегда будет 20 значений. 

Если бы я знал точное число значений на втором уровне, проблемы вообще бы не было..

Код

$sql = "insert into my_group (pos0, pos1, pos2) values('$arr[0]', '$arr[1]', '$arr[2]')";


а надо 
Код

$sql = "insert into my_group (pos0, pos1, pos2....) values('$arr[0]', '$arr[1]', '$arr[2]'.....)";


С названиями столбцов проблем нет 
Код

// Сичитаем сколько столбцов в таблице
$columns = count($data[0]);
            
// Добавляем названия заголовков таблицы db;
for ($i = 0; $i < $columns; $i++ ) {
$col .= "pos".$i.",";
}
// Убираем последнюю зяпятую
$col = substr($col,0,-1);

echo $col

//Получаем pos0, pos1, pos2... 



А вот со значениями что то не получается...
PM   Вверх
icewind
Дата 13.6.2009, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 11.4.2009
Где: Ростов-на-Дону

Репутация: 20
Всего: 20



Сделай две таблицы в базе для связи один ко многим. В одну складывай элементы первого уровня ( id и любую необходимую информацию ), во вторую элементы второго уровня. Тогда не имеет значения сколько вложенных элементов и поля придумывать не надо


--------------------
user posted image
PM MAIL Skype   Вверх
MOTORIST
Дата 13.6.2009, 15:28 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 26.9.2008

Репутация: нет
Всего: нет



Тут не нужно создавать 2 таблицы (с какой целью?), чтобы в первой хранить числа от 0 до 1000 ....
Что за бред?  smile 
PM   Вверх
bars80080
Дата 13.6.2009, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



бредом это вы занимаетесь товарищ MOTORIST, вам говорят, надо изначально структуру планировать, а не пытаться неизвестное запихнуть в непонятно что

для подобной задачи достаточно было бы сделать одну таблицу с полями id, id_parent, value
и раскидать по принципу: одно значение - одна строчка в БД

а если не предусматривается поиск по значениям, то вообще ничего выдумывать не надо - сериализовать массив и запихнуть в одно поле text. как уже подсказали
PM MAIL WWW   Вверх
MOTORIST
Дата 13.6.2009, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 26.9.2008

Репутация: нет
Всего: нет



Мне нужно универсальное решение!!!!!
Поиск будет.
Число элементов массива будет постоянно меняться. 
Что тут не понятного???
Если бы массив был статичный, то я бы тут не писал (тогда решение простое).

Какая Вам структура базы нужна? Я уже все выше отписал, внимательно ознакомьтесь с задачей, а потом отписывайтесь.

Одно значение одна строчка мне не подходит (это и ребенок сделает).

----------------------------------------------------------------------
 pos1 | pos 2 | pos3    | .......
    1    | янв.   | 1.03.09|........    
    2    | фев.   | 2.03.09|........
    3    | мар.   | 4.03.09|........
......     .......       .......
___________________________________________

Это сообщение отредактировал(а) MOTORIST - 13.6.2009, 15:54
PM   Вверх
bars80080
Дата 13.6.2009, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 71
Всего: 315



Цитата(MOTORIST @  13.6.2009,  15:48 Найти цитируемый пост)
Одно значение одна строчка мне не подходит (это и ребенок сделает).

а вы видать не можете из нескольких значений сделать одно?

и как вы собираетесь производить поиск по неизвестному числу параметров? или может быть параметры известны, но некоторые могут быть не даны?
PM MAIL WWW   Вверх
MOTORIST
Дата 13.6.2009, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 26.9.2008

Репутация: нет
Всего: нет



Мне нужно общее решение. Перебрать массив и засунуть в базу. 
До поиска еще дело не дошло.
PM   Вверх
MOTORIST
Дата 13.6.2009, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 26.9.2008

Репутация: нет
Всего: нет



Решил методом отпративного.
Допустим у меня в таблице создано 20 поле pos.
А в массиве второго уровня 3 или 5 или 10 или 20 записей.
То есть сначала проверяю сколько есть, затем насильно забиваю недостающие пустыми.
Затем засовываю в базу. 

Идею подсказал модератор на joomlaforum.ru под ником beliyadm.

Спасибо и поклон ему за это.

P.S. но мне кажется все таки есть более рациональное решение smile  

Это сообщение отредактировал(а) MOTORIST - 13.6.2009, 17:57
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1200 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.