Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 存储和获取多个数据的最佳方法是什么?_Php_Mysql_Sql - Fatal编程技术网

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通常很有用。它们为您提供了一个列,每一行都有一个唯一的编号,因此,如果您愿意,您可以始终引用特定的行。它们还显示创建行的顺序。记住,关系数据库中的行本身没有顺序。最好暂时留着。