【问题标题】:Storing Strings In Database Mimicing an Array在数据库中存储字符串模拟数组
【发布时间】:2015-12-13 12:46:11
【问题描述】:

将大量链接存储到 1 个 db 列但只有 1 个 id 并使其像数组一样的最佳方法是什么?我不能完全让它工作,因为我需要以某种方式对它们进行分类。

数据库:

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

ID |链接

1 | -这里的链接-

2 | -完全分离不相关的链接-

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

所以,我需要对“链接”进行分离和分类。我尝试做explode(),将它放入一个数组中,但你不能那样组织它,我尝试使分隔符不同,例如~1~,~2~,~3~,但我无法正确分类。请注意,100 个链接将进入这一列,这听起来可能是一件坏事,但 id 是这样的,然后是 50-100 个用于简单存储链接的列。

尝试过的代码:

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

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

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

更新:基本上我需要一种方法来让用户输入字段,您将链接放入其中,然后将其以数组或可分类的形式发送到数据库,但最好是数组。

所以我做了一个季节和链接字段。我有这个:

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

请注意,如果我使用编码或序列化,我该如何将用户输入的链接“追加”到准备好反序列化的序列化数组中?

我从这里去哪里?

这样的东西有用吗?:

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

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

【问题讨论】:

  • 您可以将其放入 XML 或 JSON 格式。
  • 不要将它们放在一个字段中,将它们放在一个单独的表中,每个表都有相同的 ID。你以后会恨自己的……

标签: php mysql arrays


【解决方案1】:

究竟是什么原因把它放在一个领域?我问是因为我自己为了纯粹的懒惰做了几次以避免不同的桌子,而且几乎总是在稍后(甚至一两年)之后后悔。

答案很大程度上取决于您想要得到什么。通常只是放入表链接列表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

将是最简单、最清晰的解决方案。

如果您的要求不是这种情况,您应该明确为什么这不能解决您的特殊问题。

更新1:

您仍然应该使用规范化,这意味着创建另一个表。更新问题后,听起来您有一个 link_type(bitly、adfly、其他)。

因此,您的表 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
;

【讨论】:

  • 基本上,假设您有 889 个链接,有些是 bitly 的一部分,有些是 adfly,有些是 100 个其他链接。就像我不想制作 100 多列实际上称为 1,2,3,4,5... 我只是想要某种方法将所有这些链接添加到 1 列中。用一些东西更新问题。
  • @John123 - 我认为您也忽略了一个重要因素。 SQL,即使有你不想要的所有额外表,与所有数组拆分和解析相比,运行速度非常快,你将不得不处理一个巨大的链接记录。
【解决方案2】:

如果您需要将它们全部放入一个字段中,您可以将它们全部放入一个数组中,对其进行编码,然后将结果字符串存储在数据库中。你可以选择例如以下任一:

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

然后,当你从数据库中获取字段时,你使用相应的解码函数:

$my_links = json_decode($valueFromDatabase);
// or
$my_links = unserialize($my_links);

【讨论】:

  • 好的,至少可以说听起来很有趣。哪个更好?
  • 对于大多数用途(很可能包括您的用途),这无关紧要。但如果您对细节感兴趣,简短的回答是“视情况而定”。这个 SO 答案很好地详细说明了利弊:stackoverflow.com/questions/804045/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-09
  • 2010-11-11
  • 1970-01-01
  • 2010-12-03
  • 2010-11-11
  • 1970-01-01
相关资源
最近更新 更多