2015-09-16 1 views
2

Каков наилучший способ хранения тонны ссылок в столбце 1 db, но только для 1 id и создания его как массива ?, Я не могу заставить это работать так, как мне нужно. быть классифицированы таким образом.Сохранение строк в базе данных Mimicing aray

DB:

=====================

ID | ссылки

1 | -Links Here-

2 | -Полностью Seperate Unrelated Ссылки-

=====================

Итак, мне нужно 'ссылки', чтобы быть отделено и категоризации. Я попытался сделать explode(), который помещает его в массив, но вы просто не можете организовать его таким образом, я попытался сделать seperators разными, например, ~ 1 ~, ~ 2 ~, ~ 3 ~, но я просто не смог его правильно классифицировать. Обратите внимание, что 100 ссылок будут собираться в этот столбец, который, вероятно, звучит как плохая вещь, но id скорее так, а затем 50-100 столбцов ish для простого хранения ссылок.

Пробовал Код:

if($rdl['links'] != '') { $s1dl = explode("~S1~", $links); } 

substr(strstr($s3dl, 'http'), strlen('http')); 

echo $s3dl[0]; 
echo $s3dl[1]; 
echo $s3dl[2]; 

UPDATE: В принципе мне нужен способ, чтобы введенный пользователем поле, вы поставить ссылку на него, а затем отправить его в базу данных в массиве или что-то categorizable, но массив было бы лучше.

Так что я сделал сезон и ссылку. Я получил это:

$linkadd = $db2->prepare("INSERT INTO dl (link) VALUES (:link) WHERE imdbid LIKE :id"); 

делать заметки, если я использую закодировать или сериализации, как я хотел «Append» пользователь ввел ссылку в этот сериализованном массив, который готов быть десериализации?

Куда я иду отсюда?

Would что-то вроде этой работы ?:

$currentlinks = unserialize($rdl['links']); 
$currentlinks[] = $_POST['link']; 
$newlinks = serialize($rdl['links']); 

$linkadd->execute(array(':link' => $newlinks)); 
+0

Вы можете поместить его в XML или формате JSON. –

+0

Не помещайте их в 1 поле, помещая их в отдельный стол каждый в свою собственную строку с одинаковым идентификатором. Вы будете ненавидеть себя позже ... – AbraCadaver

ответ

0

Если вам нужно иметь их все в одном поле, вы можете поместить их все в массив, закодировать его, и сохранить полученную строку в базе данных , Вы можете выбрать, например. либо из них:

$valueForDatabase = json_encode($my_links); 
// or 
$valueForDatabase = serialize($my_links); 

Затем, когда вы получите поле из базы данных, можно использовать соответствующую функцию декодирования:

+0

Хорошо, Звучит интересно, по меньшей мере. Какая из них лучше? – John123

+0

Для большинства целей (и, скорее всего, в том числе и ваших), это не имеет никакого значения. Но если вас интересуют детали, короткий ответ - «это зависит». Этот ответ так подробно описывает плюсы и минусы: http://stackoverflow.com/questions/804045/preferred-method-to-store-php-arrays-json-encode-vs-serialize –

+0

Обновленный вопрос. – John123

0

Что именно является причиной положить его в одно поле? Я спрашиваю, потому что я сам делал это несколько раз для чистой ленивости, чтобы избежать другой таблицы, и почти всегда сожалел об этом чуть позже (даже год или два).

Ответ очень сильно зависит от того, что именно вы хотите получить. Обычно просто положить в таблицу linklist id, main_id, link, а затем

select group_concat(link) as thelinks from linklist where main_id = 3 

или даже

select main_id, group_concat(link) as thelinks 
from linklist 
where main_id in (4,5,6) 
group by main_id 

будет самым простым и прозрачным.

Если это не так по вашему запросу, вы должны сделать ясно , почему это не решит вашу особую проблему.

Update1:

Вы все еще должны использовать нормализацию, что означает создание другой таблицы. После того, как вы обновили вопрос, похоже, что у вас есть link_type (bitly, adfly, others).

Так у вас есть таблица dl с id и некоторыми другими областями, и вы делаете стол dl_links, который состоит из

create table dl_links (
    id int(11) not null primary key auto_increment, 
    dl_id int(11) not null, 
    link_type varchar(255), # bitly, adfly, others 
    link varchar(2000) 
} 

Когда новая ссылка приходит, вы не храните его в таблице dl, но в dl_links:

insert into dl_links set dl_id= :id, link_type = :type, link = :link 

или если вы хотите

insert into dl_links (dl_id, link_type, link) values (:id, :type, :link); 

Тогда вы можете прочитать звенья dl в пути

select dl.id, dl_link.link_type, group_concat(dl_link.link) as linklist 
    from dl 
    inner join dl_links on dl_links.dl_id = dl.id 
    group by dl.id, dl_link.link_type 
; 
+0

В принципе, скажем, у вас есть 889 ссылок, некоторые из них являются частью бит, некоторые из них являются выходцами, а некоторые - 100 другими. Например, я не хочу, чтобы 100 + столбцы практически назывались 1,2,3,4,5 ... Я просто хочу, чтобы добавить все эти ссылки в 1 столбец. Обновление вопроса с чем-то. – John123

+0

Обновленный вопрос. – John123

+0

@ John123 - Я думаю, что вы тоже не заметили большого фактора. SQL, даже со всеми дополнительными таблицами, которые вы не хотите, будет работать очень быстро по сравнению со всеми расщеплениями массивов и синтаксическими разборами, которые будут иметь отношение к одной гигантской записи ссылок. – Blizzardengle

Смежные вопросы