Я извлекаю длинный текстовый фрагмент для строки. Пример: описание книги. Есть ли способ, которым я могу ссылаться на другие значения одной и той же строки в более длинном тексте как на форму переменной. Идея здесь заключается в том, что мне не нужно расчесывать весь длинный текст и изменять каждый экземпляр значения, на которое ссылаются.
Используя то же, что и раньше: описание, которое является столбцом, полученным из той же строки, что и название и автор той же книги: "$ TITLE - это книга, написанная $ AUTHOR и т.д.". Если, например, одна и та же строка имела столбец заголовка и столбца со значением "Huckleberry Fin" и "Mark Twain", а столбец описания со значением "$ TITLE - это книга, написанная $ AUTHOR и т.д.",.. Когда описание было восстановлено, в описании будет указано, что "Huckleberry Fin - это книга, написанная Марк Твеем и т.д. И т.д.". Повторное использование того же примера: если указанное выше название строки было обновлено до "Приключения Гекльберри Финна" без обновляя описание, которое было бы трудоемким и утомительным процессом, которого я бы хотел избежать, когда описание будет восстановлено, он будет читать: "Приключения Гекльберри Финн - это книга, написанная Марк Твеном"
Возможно, этого не существует, и мне нужно будет сделать свой собственный движок для этого веб-сервера, но, похоже, лучшим вариантом для эффективности было бы это сделать в базе данных, а не в веб-сервере. Может быть, я не знаю достаточно о 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
);
Добавление большего количества заполнителей не сделает его нечитаемым.
[..], но кажется, что лучшим вариантом для эффективности было бы это сделать в базе данных, а не на веб-сервере.
Я не вижу причин, почему любой язык должен делать это менее эффективно, чем MySQL.
В любом случае, похоже, что это было бы очень распространено на сервере
Я сомневаюсь, что. Вы найдете много комментариев, таких как "Почему бы вам не сделать это на языке приложений?". По крайней мере, MySQL имеет очень ограниченную поддержку для обработки строк.
Вы пытаетесь вызвать разные данные в одной строке? Вы можете использовать mysql_fetch_row
.
Если да, вы можете добавить столбец индекса, например
=============================
index | title | character
1 | Гекльберри Финн | Том Совер
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
Вы можете взглянуть на это руководство.
И вы можете узнать, как использовать escape-функции, такие как mysql_escape_string() здесь.
PS Извините за уродливую таблицу, нарисованную LOL