如何引用 mysql 中同一行的值?
How to refference a value from the same row in mysql?
我正在检索一行的长文本简介。示例:一本书的描述。有没有一种方法可以将较长文本中同一行的其他值作为变量形式引用。这里的想法是我不必梳理整个长文本输出并更改引用值的每个实例。
使用与以前相同的方法:描述是从与同一本书的标题和作者相同的行中检索的列:
“$TITLE 是 $AUTHOR 等人写的一本书。”
例如,如果同一行的标题列和作者列的值为 "Huckleberry Fin" 和 "Mark Twain",描述列的值为“$TITLE is a book written by $AUTHOR etc. etc. "" .. 检索描述时,描述将显示为 "Huckleberry Fin is a book written by Mark Twain etc. etc."
Re-Using同例:
如果上一行的标题更新为 "The Adventures of Huckleberry Finn" 而没有更新描述,我想避免这是一个费力且乏味的过程,当检索到描述时,它将显示为:"The Adventures of Huckleberry Finn is a book written by Mark Twain"
也许这不存在,我必须为其 Web 服务器端制作自己的引擎,但似乎提高效率的最佳选择是在数据库而不是 Web 服务器中完成此操作。也许我对 MySQL 的了解不够,无法知道这可以使用诸如视图之类的东西来实现。无论如何,这似乎是在服务器上完成的一件很常见的事情,我无法想象这不可能完成......但话又说回来,也许我错过了一些非常简单的事情。
您可以使用 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
);
添加更多占位符不会使其不可读。
[..] but it seems like the best option for efficiency would be to have
this done in the database and not the web server.
我看不出任何原因,为什么任何语言的效率都低于 MySQL。
Anyway, it seems like this would be a very common thing to have done
on the server
我对此表示怀疑。你会发现很多像 "Why don't you do that in application language?" 这样的评论。至少 MySQL 对字符串操作的支持非常有限。
您是否尝试调用同一行中的不同数据?您可以使用 mysql_fetch_row
.
如果是,可以添加一列索引,如
===============================
索引 |标题 |字符
1 |越橘鳍 |汤姆·索尔
2 |美国广播公司 |约翰
================================
假设你的 table 名字叫 "books",那么你
$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。抱歉画得丑 table LOL
我正在检索一行的长文本简介。示例:一本书的描述。有没有一种方法可以将较长文本中同一行的其他值作为变量形式引用。这里的想法是我不必梳理整个长文本输出并更改引用值的每个实例。
使用与以前相同的方法:描述是从与同一本书的标题和作者相同的行中检索的列: “$TITLE 是 $AUTHOR 等人写的一本书。” 例如,如果同一行的标题列和作者列的值为 "Huckleberry Fin" 和 "Mark Twain",描述列的值为“$TITLE is a book written by $AUTHOR etc. etc. "" .. 检索描述时,描述将显示为 "Huckleberry Fin is a book written by Mark Twain etc. etc." Re-Using同例: 如果上一行的标题更新为 "The Adventures of Huckleberry Finn" 而没有更新描述,我想避免这是一个费力且乏味的过程,当检索到描述时,它将显示为:"The Adventures of Huckleberry Finn is a book written by Mark Twain"
也许这不存在,我必须为其 Web 服务器端制作自己的引擎,但似乎提高效率的最佳选择是在数据库而不是 Web 服务器中完成此操作。也许我对 MySQL 的了解不够,无法知道这可以使用诸如视图之类的东西来实现。无论如何,这似乎是在服务器上完成的一件很常见的事情,我无法想象这不可能完成......但话又说回来,也许我错过了一些非常简单的事情。
您可以使用 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
);
添加更多占位符不会使其不可读。
[..] but it seems like the best option for efficiency would be to have this done in the database and not the web server.
我看不出任何原因,为什么任何语言的效率都低于 MySQL。
Anyway, it seems like this would be a very common thing to have done on the server
我对此表示怀疑。你会发现很多像 "Why don't you do that in application language?" 这样的评论。至少 MySQL 对字符串操作的支持非常有限。
您是否尝试调用同一行中的不同数据?您可以使用 mysql_fetch_row
.
如果是,可以添加一列索引,如
===============================
索引 |标题 |字符
1 |越橘鳍 |汤姆·索尔
2 |美国广播公司 |约翰
================================
假设你的 table 名字叫 "books",那么你
$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。抱歉画得丑 table LOL