如何引用mysql中同一行的值?

时间:2018-02-20 03:30:30

标签: mysql database database-design relational-database

我正在检索一行的长文本模糊。示例:书籍的说明。有没有办法可以在较长的文本中引用同一行的其他值作为变量的形式。这里的想法是,我不必梳理整个长文本输出并更改引用的值的每个实例。

使用与之前相同的描述:描述是从同一行中检索的列,如同一本书的标题和作者: " $ TITLE是一本由AUTHOR等编写的书。" 例如,如果同一行有一个标题列和作者列,其值为" Huckleberry Fin"马克吐温"马克吐温"和值为#34的描述栏; $ TITLE是由$ AUTHOR等编写的书等。"" ..当检索到描述时,描述将是" Huckleberry Fin是由马克吐温等编写的书等。" 重新使用相同的示例: 如果上面这一行的标题更新为" The Huckleberry Finn"没有更新描述,这将是一个我想避免的费力和繁琐的过程,当检索描述时它会读到:" Huckleberry Finn历险记是马克吐温写的一本书"

也许这不存在,我必须为它的Web服务器端制作我自己的引擎,但似乎效率的最佳选择是在数据库而不是Web服务器中完成。也许我对MySQL知之甚少,知道这可以通过使用类似于视图的东西来实现。无论如何,这似乎是在服务器上完成的一件非常普通的事情,我无法想象这不可能做到......但话又说回来,也许我错过了一些非常简单的东西。

2 个答案:

答案 0 :(得分:1)

您可以使用REPLACE

SELECT title, REPLACE(description, '$TITLE', title) as description FROM books

但如果你需要使用嵌套的REPLACE表达式替换多个占位符,那将是不可能的:

SELECT title,
    REPLACE(
        REPLACE(description, '$TITLE', title),
        '$MAINCHARACTER',
        main_character
    ) as description
FROM books

我宁愿用应用程序语言来做。例如,使用PHP,您可以使用:

$description = str_replace(
    ['$TITLE', '$MAINCHARACTER'],
    [$title, $mainCharacter],
    $description
);

添加更多占位符不会使其无法读取。

  

[..]但似乎效率的最佳选择是   这在数据库中完成,而不是在Web服务器上完成。

我没有看到任何理由,为什么任何语言都应该比MySQL效率低。

  

无论如何,这似乎是一件非常普遍的事情   在服务器上

我对此表示怀疑。您会发现许多评论,例如“为什么不在应用程序语言中执行此操作?”。至少MySQL对字符串操作的支持非常有限。

答案 1 :(得分:0)

您是否尝试在同一行内调用不同的数据?您可以使用mysql_fetch_row

如果是,您可以添加一列索引,例如

=============================

索引|标题|字符

1 | Huckleberry Fin |汤姆萨维尔

2 | ABC |约翰

==============================

并说你的表名称为“书籍”,然后你做

$handle = mysql_query('SELECT * FROM books WHERE index=1');
$row = mysql_fetch_row($handle);

所以$ row [0] = 1,$ row [1] = Huckleberry Fin,$ row [2] = Tom Sawer

您可以查看此manual

您可能想学习如何使用mysql_escape_string()here之类的转义函数。

P.S。抱歉,丑陋的桌子绘制了LOL