Здрасти! Есть бд test в ней таблица table с полями id и var Мне нужно сделать в поле var что-то типо массива, например: в поле var массив $mass[1] = "value1" $mass[2] = "value2" и т. д. Но хотелось бы осуществить это с помощью функций mysql не применяя метод типо этого: в поле var значение: value1***value2 и из этого значения массив с помощью php: explode("***", $mass) - способ не из плохих, но хочется с помощью mysql Есть такая возможность в mysql?
смотри, знаешь есть метод хранения банных в файлах? записываются данные примерно так: id***значение *** - идёт как различитель между id и значением это заменилось базой дынных, там есть поля id в котором id числа и поле var в котором значение... так вот в поле var в котором значения, мне нужно поместить массив если вводить массивом в php, то получится типо такого: $mass['id'] и $mass['var'] но мне нужно в массиве $mass['var'] создать ещё один массив, типо такого: $mass['var']['var2'] но чтобы значения var2 хранились в бд, в поле var в виде массива
:-D Храни в виде строки, используй какой-нибудь разделитель (те же *** или запятую или точку с запятой или еще что-то). Перед вставкой в БД делай implode, а при выборке explode. Другой вариант - отдельная таблица, гда каждому значению var сопоставляется несколько var2. Ну и индекс по var.
так вот именно не хочу создавать таблицу, пока точно не узнаю есть ли способ, которым я хочу воспользовать
smails Думаю, прочтение документации о типах данных, поддерживаемых MySQL, поможет прояснить ситуацию. Я предложил два очевидных способа - выбирай.
Прочитал тут: http://www.mysql.ru/docs/man/Column_types.html Нет такой, о которую хочу...(( Знаю эти способы как облупленные, но помоему должен быть такой тип, что массивы хранятся... хотя пока не придумал как это может выглядель на языке sql А хотя возможно я хочу невозможного...
приведи пример хоть одной из них Хотя если буду знать, что такая есть, то всё равно хостингу не прикажешь, чтоб такая на хосте была, да и к mysql больше привык... Но будет полезно что-то новое узнасть
smails Лучше задумайся о том, что такое массив и как устроены базы данных (именно базы, не системы управления). А уметь система управления может многое, в том числе принимать на вход массив и хранить его первым или вторым способом,а может и двумя сразу. Или уметь оба, а в зависимости от массива - выбирать. В случае MySQL эта функция возложена на программиста. Было такое выражение: "Зри в корень." (с) Козьма Прутков (по-моему его это слова).
Я взагаліто завжди використовую спосіб з explode(), але якщо ти нехочеш тримати всі дані масива в одному полі тоді просто створи ще декілька таблиць, де кожний запис буде елементом масиву, а в поле var занось назви цих таблиць (до якої саме потрібно звертатись).
Невже так важлива мова, мені здається мене зрозуміють. Тим більше нехочу паклюжити російську - без помилок ненапишу напевно жодного речення. Чому в виборі мови інтерфейсу форума є Українська?
Тоже мне пуп земли. Вы глубоко ошибаетесь. Даже скажу больше, не захотят общаться. Чтобы было если я начал писать на белорусском, Vladson на эстонском, Горбунов Олег на казахском?
>>Чтобы было если я начал писать на белорусском был я в Минске.. по началу просто в шок приводили объявления в Минском метро на белорусском, "граждане, остерегайтесь краж из карманов и сумок".. да еще и таким темпом=)
smails, я так понял, что у тебя одно из полей в таблице содержит массив. На вопрос о том, в каком виде хранить данные, можно ответить, если знать, что ты хочешь делать с этими данными. Например: Я делаю базу данных фотографий. Существуе набор категорий. В таблице с фотографиями, есть поле в котором через разделитель записаны категории, которые относятся к данной фотке. На странице на сайте требуется выводить таблицу с фотками, в соответствии с выбранными категориями, т.е. их может быть несколько выбрано. Я рылся в документации, искал разные способы организации такой БД. Пробовал разные варианты. В результате нашел, что в запросах MySQL можно делать расширенные запросы с помощью слова REGEXP. Поэтому организовал БД так... Код (Text): FileName Category muha_na_cvetke.jpg flower,insect ptica_v_nebe.jpg bird,sky muha_v_nebe.jpg insect,sky zakat.jpg sky Теперь, если мне нужна какая-то категория, или несколько, я делаю запрос: Код (Text): SELECT t.Category REGEXP 'insect|bird' FROM table t; И мне возвращаются таблица с указанием на записи, которые содержат данные ключевые слова. (Подробнее почитать об этом можно здесь http://www.php.ru/mysql/regexp.html)
Mavir, я это выражение писал не из головы, а проверил в MySQL Query Browser на существующей таблице. Работает! Возвращает таблицу с 0 и 1, как вы правильно заметили, номера ячее с еденичками соответствуют номерам нужных записей в БД. Для большей точности запроса, я бы еще добавил: Код (Text): SELECT t.Category REGEXP 'insect|bird' FROM table t ORDER BY t.Filename; Тоже только что проверил запрос. Тоже работает.
Кроме 0 и 1 больше нет никакой информации. Как можно соотнести какую-то 0(1) с записью в таблице? Во-вторых, в таком случае будут выбраны все записи из таблицы. А зачем выбирать данные которые нам не нужны (т.е. те, для которых вернется 0)? P.S. Откройте для себя конструкцию "WHERE". Это намного упростит Вам жизнь.
Mavir, как больше никакой информации? А порядковый номер ячейки в запросе? Он же прямо указывает на номер записи. Можно сделать вложенный запрос, который выбирает те записи, для который есть 1.
И что это даст? Как бы некоторые сказали, у таблицы нет начала и конца, соответственно, и нет порядкового номера. Если Вы мазахист, то делайте.