我有一个名为fields_data_for_site
的表,该表连接到名为sites
的表,其中fields_data_for_site.site_id = sites.id
我想使用PDO并在一个查询中返回以下数组:
"site_name" => "MySite",
"site_link" => "mylink",
"f" => [
"callback" => "usr2",
"action" => "usr"
]
元素'f'
包含表fields_data_for_site
中的数据,用于当前正在选择的site_id(我想选择所有内容)。
我尝试了什么:
SELECT sites.*, (SELECT `name`, `value` FROM fields_data_for_site) AS f
FROM sites LEFT JOIN fields_data_for_site ON fields_data_for_site.site_id = sites.id;
收到一个错误:
Operand should contain 1 column(s)
我知道标题有点令人困惑,但我将在高级解释我的问题。
我有一项服务,显示人们可以投票的网站,然后在投票支持该服务所需的所有网站后获得奖励。
现在问题与管理方面有关,您必须添加网站。
在管理员面板中,有一个名为“网站管理”的页面,您可以在其中添加需要人们投票的网站。
现在,我们不希望人们胡扯他们的投票,我们需要知道他们是否投票肯定 - 因此我们将使用回调系统。
回调如何运作,我已经添加了两个模块
参数回调:管理员将使用此模块,如果他添加的网站将在投票时使用选民的用户名或IP向服务发送回叫,特定参数(即www.myservice.com/callback/?user=votedusername)。
IP检查:只有当他添加的网站支持ip检查时,管理员才会使用此模块 - 如果ip已经投票,网站的检查链接将返回true,false如果没有。
现在我拥有的是一个非常友好的方式,为开发人员添加新模块,模块可以包含以下内容:
等等。
所以是的,当管理员进入添加网站页面时,他应该看到他选择的模块提供的字段。
请参阅此数据库图表:
img http://gyazo.com/8a6a41088e52c8e9aee1ca4529d53e5c.png
我忘了包含一个名为Modules的框,但它只包含模块名称和主要ID。
无论如何,现在你有一点背景,现在我将解释我的问题。 我想显示添加到系统中的所有站点的列表,包括它的信息,以及它正在使用的模块的所有信息。
对于网站使用的模块中的每个字段,有2列,名称和值,其中name是字段的名称,value是值。
现在我希望网站显示在表格中,然后让模块的字段成为表格的一部分,其中fields_data_for_site.name
将是表格中的一列,{{1}将是它的价值。
示例:
我们有一个名为DualParameter的模块,它提供以下字段:
fields_data_for_site.value
我是管理员,现在使用此模块为我添加的新网站添加以下2个参数:field_type: text
field_name: param1
placeholder: first parameter name
field_type: text
field_name: param2
placeholder: first parameter name
表格如下:
param1: usr, param2: user
注意:这不是数据库表,它是我将在adminCP,系统中的站点中显示的表。
我没有显示我添加网站名称,网址等的部分,因为它没有必要且与模块无关。
您是否看到表格中的每个字段都有一个包含其名称和值的列?
现在的问题是,我需要一个查询,它将返回一个包含每个站点模块字段的PHP的就绪数组,来自fields_data_for_site,此外还有站点的信息(即网站名称,链接等。)
我尝试了什么
| Site name | Link for user | module | param1 | param2|
+-----------+---------------+---------------+--------+-------|
| My Site | www.bla.com/..| DualParameter | usr | user |
--------------------------------------------------------------
这是可行的,但是,如果站点有多个模块字段,它会返回一个新的数组元素。
此查询返回的示例数据:
img2 http://gyazo.com/c0096012ed032d5c1bf14cddecdb01b4.png
你可以看到SELECT sites.*, fields_data_for_site.name as name, fields_data_for_site.value as value
FROM sites
LEFT JOIN fields_data_for_site
ON fields_data_for_site.site_id = sites.id
22有两行吗?
现在我的问题是,如何设计它,所以如果它包含多个字段而不使用2个查询,它会在PHP中返回一个包含每个站点的子数组的就绪数组?
我可以在一列中使用多个值/列,然后在php中使用implode,但这不是数据库的设计方式。
数组示例:
site_id
回调和操作只是字段的名称。
有什么想法吗?
P.S我使用PDO。
我尽力解释我的问题,我希望它足够而不是太多。 感谢。