我正在开发一个有趣的应用程序,并且我有意不在适度应用程序的客户端或服务器端使用 PHP 和 JS 等 mustache 之外的任何框架。
每个 View 都有一个表,其中包含用于每个 View 的所有数据。我希望执行一个查询,以选择表中的每一列并使其可用于我的 mustache 模板。
我不想为了在运行时访问任何特定列而更改方法。 fetchAll 在返回的数据中给了我大量我不想要的空字段,而 fetch() 给了我一个很好的 JSON 结构,其中包含所有正确的数据,除了包含多行数据的列只显示第一行/实例。
这是我的 PHP 方法:
public function get_view($view_name , $out_type = "raw"){
// Col names may vary from view table to view table
$statement = $this->prep_sql("SELECT * FROM `$view_name`");
$statement->execute(array());
$view_data = $statement->fetch(); // I know fetchAll will work for arrays but how then will my mustache template bind to data returned from columns with more than one row?
return (strtoupper($out_type) === "JSON" ? json_encode($view_data) : $view_data);
}
我想要的是忽略任何具有 null 或空的字段,就好像它们不存在一样,并在数据库中形成一个包含多行数据列的数组。我还意识到,对页面标题和 fetchAll 等单个实例使用 fetch 将适用于多行,但我想消除这种情况。
为了使模板正确绑定(bind),数据输出必须类似于:
{
module_name: 'main',
module_title: 'Main',
module_images: ['http://...', 'http://...', 'http://...'],
module_scripts: ['http://...','http://...','http://...',]
}
我得到的不是 fetchAll
[{
module_name: 'main',
module_title: 'Main',
module_images: 'http://...', // 1
module_scripts: 'http://...' // 1
}, {
module_name: null,
module_title: null,
module_images: 'http://..', // 2
module_scripts: 'http://..' // 2
}];
我知道 SELECT * 不是选择所有 View 数据的传统方法,但是每个 View 表中的列数将少于 100 个最大值,并且除了 View 表之外没有其他表将使用通配符选择访问。也就是说,连同 View 之间的动态列名称意味着要编写的代码更少。我希望这不会冒犯任何人:)
谢谢大家的帮助。
最佳答案
这就是你想要的吗??
CREATE TABLE view_data_main (
module_name VARCHAR(30),
module_title VARCHAR(30),
module_images VARCHAR(30),
module_scripts VARCHAR(30)
)
INSERT INTO `view_data_main` (module_name,module_title,module_images,module_scripts) VALUES
('welcome','main','http://www.test.com','http://www.test2.com'),
(NULL,NULL,'http://www.test.com','http://www.test2.com'),
(NULL,NULL,'http://www.test.com','http://www.test2.com')
SELECT module_name,module_title,GROUP_CONCAT(module_images),GROUP_CONCAT(module_scripts)
FROM `view_data_main`
WHERE module_images IS NOT NULL AND module_scripts IS NOT NULL
GROUP BY CONCAT(module_images,',',module_scripts)
重新阅读问题后,我认为子查询不是必需的,除非我遗漏了什么?
关于php - 使用 PDO 从表 mySQL 制作模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34145620/