Как сослаться на значение из той же строки в MySQL?

0

Я извлекаю длинный текстовый фрагмент для строки. Пример: описание книги. Есть ли способ, которым я могу ссылаться на другие значения одной и той же строки в более длинном тексте как на форму переменной. Идея здесь заключается в том, что мне не нужно расчесывать весь длинный текст и изменять каждый экземпляр значения, на которое ссылаются.

Используя то же, что и раньше: описание, которое является столбцом, полученным из той же строки, что и название и автор той же книги: "$ TITLE - это книга, написанная $ AUTHOR и т.д.". Если, например, одна и та же строка имела столбец заголовка и столбца со значением "Huckleberry Fin" и "Mark Twain", а столбец описания со значением "$ TITLE - это книга, написанная $ AUTHOR и т.д.",.. Когда описание было восстановлено, в описании будет указано, что "Huckleberry Fin - это книга, написанная Марк Твеем и т.д. И т.д.". Повторное использование того же примера: если указанное выше название строки было обновлено до "Приключения Гекльберри Финна" без обновляя описание, которое было бы трудоемким и утомительным процессом, которого я бы хотел избежать, когда описание будет восстановлено, он будет читать: "Приключения Гекльберри Финн - это книга, написанная Марк Твеном"

Возможно, этого не существует, и мне нужно будет сделать свой собственный движок для этого веб-сервера, но, похоже, лучшим вариантом для эффективности было бы это сделать в базе данных, а не в веб-сервере. Может быть, я не знаю достаточно о MySQL, чтобы знать, что это может быть достигнуто с использованием чего-то вроде вида, например. Во всяком случае, похоже, что это было бы очень распространено на сервере, и я не могу себе представить, что этого не может быть сделано... но опять же, может быть, мне не хватает чего-то действительно простого.

  • 0
    Вы не имеете в виду, где {описание столбца}, как "% param1%" и {описание столбца}, как "% param2%". Я понятия не имею, правильный ли синтаксис, но он будет делать то, что я думаю, вы хотите в MS SQL
  • 0
    Я не знаю, достаточно ли я старался понять предыдущую версию, но эта версия понятна.
Теги:
database
database-design
relational-database

2 ответа

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
);

Добавление большего количества заполнителей не сделает его нечитаемым.

[..], но кажется, что лучшим вариантом для эффективности было бы это сделать в базе данных, а не на веб-сервере.

Я не вижу причин, почему любой язык должен делать это менее эффективно, чем MySQL.

В любом случае, похоже, что это было бы очень распространено на сервере

Я сомневаюсь, что. Вы найдете много комментариев, таких как "Почему бы вам не сделать это на языке приложений?". По крайней мере, MySQL имеет очень ограниченную поддержку для обработки строк.

  • 0
    Мне нравится то, к чему вы клоните, и, возможно, мне придется делать все замены строк в приложении. Я просто хотел бы использовать язык в полной мере, прежде чем переписывать колесо, если это возможно, и, поскольку у меня нет большого опыта работы с MySql, я решил спросить, прежде чем посвятить 12 часов работы в направлении, которое могло бы решаться за 10 минут работы. Это кажется достаточно распространенной операцией, и можно подумать, что, возможно, это было решено на уровне базы данных. Если это не особенность MySql, то кто-то должен предложить это.
  • 0
    PS Основная причина, по которой я надеялся, что это было решено в базе данных, заключается в том, что если я получаю описание, используя php, я знаю, что могу редактировать значения и могу написать это в PHP 1 раз, но если мои коллеги получают описание, используя python или perl, они также должны стирать данные, как я, и эта реализация должна быть записана несколько раз. Кажется, НАМНОГО чище только для того, чтобы получить описание и не делать никакой постобработки, не так ли?
Показать ещё 3 комментария
0

Вы пытаетесь вызвать разные данные в одной строке? Вы можете использовать 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

  • 1
    Здравствуй. Если вы не знаете, чего они хотят, не догадайтесь, подождите, пока у вас не будет достаточно репутации, чтобы попросить разъяснений через комментарий. Гадание только порождает мусор неверно направленных бесполезных ответов. Если сообщение неясно, то оно не представляет ответного вопроса. PS Пожалуйста, прочитайте справку по редактированию блоков кода (для кода и таблиц) и посмотрите отформатированную версию вашего поста под полем редактирования.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню