php - MYSQL 结果格式化

标签 php mysql

假设我们有:

tbl `posts`

id | post_type | post_id | post_key | post_value                      | Locale 
------------------------------------------------------------------------------
1  | news      | 1       | title    | The climate in Mongolia         | pl_pl
2  | news      | 1       | content  | Mongolia has strange weather... | pl_pl
3  | news      | 1       | date     | 2015-9-24                       | pl_pl

为了获取帖子的数据,我会

SELECT post_key, post_value 
FROM posts 
WHERE post_id = 1 && post_type = 'news'
AND locale = 'pl_pl'

然后循环遍历结果集和 mysqli_fetch_assoc() 每一行,给我一个以字段名作为数组键的关联数组;

$row['post_key'] == 'title'; $row['post_value'] == 'The climate in Mongolia';
$row['post_key'] == 'content'; $row['post_value'] == 'Mongolia has strange weather...';

我想要的是 post_key 的实际值是数组键,将值保持为 post_value。所以:

$row['title'] == 'The climate in Mongolia'; 
$row['content'] == 'Mongolia has strange weather...'; 

是的,我可以用 php 和另一个循环像这样格式化它,比如:

$data = [];

foreach($rows as $r) {
    $data[$r['post_key']] = $r['post_value'];
}

但我想知道是否有一些 mysql 魔术可以节省 PHP 所需的额外处理?


有关此应用程序的更多信息:正如 Gal 正确指出的那样,我不只是按照 post_key 的/常规表设计使用字段名称,这似乎很奇怪。但这是一个翻译表,我正在探索使用一个表来满足许多其他内容表的翻译的可能性,并且我可以将其用于新的内容类型,而无需过多地创建多个附加表并维护新字段他们。在这个阶段我不担心性能的原因: 1. 作为这个启动项目的唯一开发人员并且在动态中做出决策,我相信这将节省时间并暂时勾选所有方框。 2,与几年时间相比,参赛作品的数量将会减少,届时我们将有时间寻找解决方案来解决出现的任何性能问题。

最佳答案

您可以使用这样的选择来获取一行中的所有 post_key->post_value:

SELECT
  title,
  MAX(content) AS content,
  MAX(date) AS date
FROM (
  SELECT
    post_type,
    post_id,
    CASE
      WHEN post_key = 'title' THEN
        post_value
    END AS title,
    CASE
      WHEN post_key = 'content' THEN
        post_value
    END AS content,
    CASE
      WHEN post_key = 'date' THEN
        post_value
    END AS date
  FROM
    posts
  WHERE
    post_type = 'news' AND
    post_id = 1
) AS a
GROUP BY
  post_id

http://sqlfiddle.com/#!9/04684/1

更新:

您可以像我公开的那样做一些事情,但是使用列值作为列名,就像这样的问题:

mysql select dynamic row values as column names, another column as value

MySQL select specific row values as column names

然后像这样调用一个过程:

How to call a MySQL stored procedure from within PHP code?

希望对你有帮助!

关于php - MYSQL 结果格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32756447/

相关文章:

mysql - java.sql.SQLException : target: commerce. 0.primary:vttablet:rpc 错误:代码 = InvalidArgument desc = 未知系统变量 'query_cache_size'

php - 如何优化mysql中的查询

mysql - 计算mysql表中的单词出现次数

PHP函数将小数点移动到开头

php - 更改 Facebook Like 代码中的 URL

php - 在 foreach 内部运行时遇到格式不正确的数值

php - 如何连接到heroku mysql数据库

php - 无法通过 Hostgator 中的 Office365 使用 PHP (phpmailer) 发送邮件。如何解决这个问题?

php - 使用最新的 PHP 语法是否有任何性能提升?

php - mysql multiple COUNT() from multiple tables with LEFT JOIN