Php 存储和获取多个数据的最佳方法是什么?
下表中的每个Php 存储和获取多个数据的最佳方法是什么?,php,mysql,sql,Php,Mysql,Sql,下表中的每个所有者都有自己的页面,当有人访问该页面时,所有座位都会显示secretcode OwnersSeats [id - ownderid - type - Seat1 - SecretCode2 -> Seat50 - SecretCode50 ] [1 - 3 - Premium - Mark - v2ttvgwrxt5cg36
所有者
都有自己的页面,当有人访问该页面时,所有座位
都会显示secretcode
OwnersSeats
[id - ownderid - type - Seat1 - SecretCode2 -> Seat50 - SecretCode50 ]
[1 - 3 - Premium - Mark - v2ttvgwrxt5cg36g3c63g36c3c54c26y4e73c6 -> Max - c4wghwh65qcg45g5qx3 ]
[2 - 3 - Standard - Jerry - 36vyh36cyh6y6wc363v636vc3yc6y3v7y37 -> Marco - h7wv5cg6qg6qcgqx3xgf5qwy4h]
[3 - 7 - Enterprise - Sonia - c3m73uhyv73vyhu3h33c65g33c7v373v73v7 -> John - 5ctev5hmkbjev7h7kje ]
对于每个Seat*VARCHAR(24),SecretCode*TEXT
可以改为VARCHAR(512)。
然后我使用这个查询选择它们
从ownerid=:ownerid的座位中选择ownerid、type、Seat1、SecreCode2->50
处理此问题的最佳方法是什么,以使其高效、良好、易于使用和编辑
我考虑将表中的所有座位都存储为文本
,如下所示
$SS = [
s1 => 'Mark', sc1 => 'v2ttvgwrxt5cg36g3c63g36c3c54c26y4e73c6',
s2 => '~~', sc2 => '~~~~~~~',
s3 => '~~', sc3 => '~~~~~~~',
s4 => '~~', sc4 => '~~~~~~~', -> 50
];
但我不知道这对表现是好是坏
我想将限制为50
,所以我有100列[SS]
50个座位
50个SecretCode
,我是否使用规范化
来处理这个问题
我认为最好将所有的SS
放在一行中,以便与所有ownerid
数据一起一次性获取,因为我认为这样会更快
此外,我不知道如何从规范化表中获取所有SS
,而不使用第二次查询
从表中获取所有相关数据,或使用GROUP_CONCAT()
,因此我想知道哪一个更适合使用性能
[OSid - Seat - SecretCode ]
[1 - Mark - v2ttvgwrxt5cg36g3c63g36c3c54c26y4e73c6]
~48 ]
[1 - Max - c4wghwh65qcg45g5qx3 ]
[2 - Jerry - 36vyh36cyh6y6wc363v636vc3yc6y3v7y37 ]
~48 ]
[2 - Marco - h7wv5cg6qg6qcgqx3xgf5qwy4h ]
[3 - Sonia - c3m73uhyv73vyhu3h33c65g33c7v373v73v7 ]
~48 ]
[3 - John - 5ctev5hmkbjev7h7kje ]
我用的是答案,不是评论,因为评论是非常有限的。我想我开始了解你的桌子了。因此,我将仅使用以下列重写该表:
id
ownderId
type
seat
secretCode
数据如下所示:
[id - ownderId - type - seat - secretCode ]
[1 - 3 - Premium - Mark - v2ttvgwrxt5cg36g3c63g36c3c54c26y4e73c6 ]
[2 - 3 - Standard - Jerry - 36vyh36cyh6y6wc363v636vc3yc6y3v7y37 ]
[3 - 7 - Enterprise - Sonia - c3m73uhyv73vyhu3h33c65g33c7v373v73v7 ]
[4 - 3 - Premium - Max - c4wghwh65qcg45g5qx3 ]
[5 - 3 - Standard - Marco - h7wv5cg6qg6qcgqx3xgf5qwy4h ]
[6 - 7 - Enterprise - John - 5ctev5hmkbjev7h7kje ]
SELECT seatNo, seat, secreCode FROM seats WHERE ownerId = :ownerid
如果座位号对您很重要,您可以添加一列,其中包含该号码。像这样:
[id - ownderId - type - seatNo - seat - secretCode ]
[1 - 3 - Premium - 1 - Mark - v2ttvgwrxt5cg36g3c63g36c3c54c26y4e73c6 ]
[2 - 3 - Standard - 1 - Jerry - 36vyh36cyh6y6wc363v636vc3yc6y3v7y37 ]
[3 - 7 - Enterprise - 1 - Sonia - c3m73uhyv73vyhu3h33c65g33c7v373v73v7 ]
[4 - 3 - Premium - 50 - Max - c4wghwh65qcg45g5qx3 ]
[5 - 3 - Standard - 50 - Marco - h7wv5cg6qg6qcgqx3xgf5qwy4h ]
[6 - 7 - Enterprise - 50 - John - 5ctev5hmkbjev7h7kje ]
该表现在已标准化。相同类型的数据不再出现在多个列中。这将使您的查询如下所示:
[id - ownderId - type - seat - secretCode ]
[1 - 3 - Premium - Mark - v2ttvgwrxt5cg36g3c63g36c3c54c26y4e73c6 ]
[2 - 3 - Standard - Jerry - 36vyh36cyh6y6wc363v636vc3yc6y3v7y37 ]
[3 - 7 - Enterprise - Sonia - c3m73uhyv73vyhu3h33c65g33c7v373v73v7 ]
[4 - 3 - Premium - Max - c4wghwh65qcg45g5qx3 ]
[5 - 3 - Standard - Marco - h7wv5cg6qg6qcgqx3xgf5qwy4h ]
[6 - 7 - Enterprise - John - 5ctev5hmkbjev7h7kje ]
SELECT seatNo, seat, secreCode FROM seats WHERE ownerId = :ownerid
对数据的任何其他查询都是类似的。从ownerid=:ownerid
非常痛苦的座位中选择Seat1,SecreCode2->50???怎么用?什么?@AbraCadaver我必须在SQL
中使用PHP
手动编写它们,但是在你问我这个问题后,我意识到我应该使用array
和foreach循环来简化我的生活。但是那张桌子的设计好吗?很难理解大局…你有性能问题吗?当您不确定自己在做什么时,最不应该做的事情就是在一个大文本中存储大量独立的数据元素。不要说:“我会处理任何导致‘以后’的问题。”当你了解了什么是数据库规范化之后,这将变得不言而喻。作为一个起始参数:假设一个所有者只有50个条目,那么您浪费了50列,或者如果另一个所有者需要150个条目,那么您必须进一步扩展表。此外,数据库已经过优化,可以处理许多行,而不是处理许多列。在您提到的这种情况下,创建一个2nd
表来容纳Seats
和secretcode
会不会更好,以节省重复的type
列的一些空间?但我真的很困惑,如果我总是被限制在100ss
为什么多栏更好?正如我从您那里了解到的,MYSQL处理行比处理列更快,但是50行
不会占用很多空间吗?是的,您可以为seat
和secretCode
创建一个单独的表,并将指针返回到包含ownerId
和type
的表,这样就可以了。我认为在你的情况下,表现不会是一个问题,所以无论你做什么,它都会起作用。在注意到不同实现之间的速度差异之前,您需要数万个座位。然而,如果你问:“处理这个问题的最佳方法是什么,以便更好地执行,更易于使用和编辑?”,那么答案总是:规范化!几乎每一篇关于它的文章都解释了确切的原因。好的,明白了,最后一个新手问题,有没有想过在第二个表中有一个自动增量id列
?在这个示例中,我只使用了OSid-Seat-SecretCode
,但它在表中是id-OSid-Seat-SecretCode
,有时我想知道是应该保留它还是删除它。自动递增id通常很有用。它们为您提供了一个列,每一行都有一个唯一的编号,因此,如果您愿意,您可以始终引用特定的行。它们还显示创建行的顺序。记住,关系数据库中的行本身没有顺序。最好暂时留着。