我开发了一种方法,可以从文件中读取复杂或冗长的查询,而不是直接在代码中读取,以避免困惑并提供对查询本身的快速引用。然后我被告知这不是首选,因为脚本必须从文件中读取,因此速度较慢。这是我的例子:
文件:sql/get_code_matches.sql
/**
* returns list of new codes
* from old code entry
* @param source - string oldcode
* @param startdate - YYYY-MM-DD format only
* @return mixed multi-dimensional array on success; false on no record
* @see @DB::is_error() in code for thrown exceptions
*
*/
SELECT NULL,
g.source,
g.target,
dx9.NAME AS oldcode,
dx9.DESCRIPTION old_description,
dx10.NAME AS newname,
dx10.DESCRIPTION AS new_description,
g.flags,
SUBSTR(g.flags, 4, 1) AS scenario,
SUBSTR(g.flags, 5, 1) AS POSITION,
SUBSTR(g.flags, 1, 1) AS approximate,
SUBSTR(g.flags, 3, 1) AS combination,
SUBSTR(g.flags, 2, 1) AS matches,
CASE
WHEN SUBSTR(g.flags, 2, 1) = 1 THEN 'No Matches'
ELSE 'Matches'
END AS MATCH TYPE,
CASE
WHEN SUBSTR(g.flags, 3, 1) = 1 THEN 'Combination Matches'
ELSE CASE
WHEN SUBSTR(g.flags, 1, 1) THEN 'Approximate Matches'
ELSE 'Match'
END
END AS status
FROM tablex g
LEFT JOIN tabley dx10 ON dx10.CODE = g.target
LEFT JOIN tablez dx9 ON dx9.CODE = g.source
WHERE 1
AND g.source = ?
AND g.startdate = ?
//然后是 OOP 代码中的某处:
$sql = $this->db->load_sql('get_code_matches'); // reads sql from file
$results = $this->db->FetchAll($sql, $bindParams); // returns results via pdo object
sql文件夹通过.htaccess进行保护,并为自定义数据库层获取数据。
我们发现我们的模型区域更有组织性,可以标记诸如此类的复杂查询。
查询仅在需要时才加载到代码中。
根据 IDE,“sql”文件夹始终打开以供快速引用。在某些情况下,sql 文件夹可能包含代表项目的每个模块的子文件夹。
这会被视为不好的做法吗?
最佳答案
对于 99.99% 的网站来说,这没有任何意义。
对于 0.01% 高负载的网站,建议将这些 SQL 查询放入 PHP 文件中,让它们缓存在 opcache 中,这样就不会在每次请求时都读取它们。
关于php - 将 MySQL 查询存储在文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32414493/