#mysql
#mysql
Вопрос:
Вот запрос, который я должен вызывать каждый раз, когда в базу данных добавляется новый элемент :
UPDATE `cas_phocagallery`,`cas_phocagallery_categories`
SET cas_phocagallery.description=concat(
cas_phocagallery_categories.title,'<br />',cas_phocagallery.description)
WHERE cas_phocagallery.catid = cas_phocagallery_categories.id;
Это работает нормально, за исключением того, что при каждом запуске запроса создается дубликат.
Я попытался добавить distinct, но получаю сообщение об ошибке, и я не уверен, что это правильно в данном случае.
Спасибо за ваше сотрудничество, я весь день искал всевозможные способы, но безуспешно.
Комментарии:
1. Это не запрос. Это оператор DML (язык обработки данных). Если у вас есть уникальный ключ в этом столбце, он будет выдавать ошибку каждый раз после первого успешного обновления.
2. Спасибо за исправление, я совсем не эксперт и очень стараюсь найти решение.
Ответ №1:
Когда у вас есть уникальный ключ, он должен выдавать ошибку при вставке повторяющегося значения и является ожидаемым поведением. Я думаю, что вам следует обратить внимание на обновление дубликата ключа, где вы можете указать, что делать, если найден дубликат.
Комментарии:
1. Он не вставляет, он обновляет.
2. поскольку ни один из вызванных столбцов не уникален, как бы мне использовать обновление дублированного ключа? На самом деле, что мне нужно сделать, это добавить заголовок элемента, который находится в одной таблице, к описанию, которое находится в другой таблице. И оба элемента являются частью модуля, созданного в joomla. Итак, правильно ли использовать update, я действительно не эксперт в mysql.
3. Вы можете создавать уникальные индексы в MySQL для нескольких столбцов. Читать dev.mysql.com/doc/refman/5.0/en/create-index.html для синтаксиса. Клавиша on duplicate срабатывает при наличии дубликата на основе комбинации столбцов, и вы можете использовать соответствующую инструкцию SQL для выполнения действия с дубликатом (например, обновление существующей записи, добавление значения в таблицу журнала и т.д.)
Ответ №2:
Каждый раз, когда вы запускаете запрос, вы добавляете title
к текущему description
. Если вы запустите его три раза подряд, вы получите
title <-- added by 3rd
title <-- added by 2nd
title <-- added by 1st
description (original)
Это то, что вы имеете в виду? Это именно то, для чего предназначен запрос. Возможно, вам нужен другой столбец для сохранения «base_description», чтобы каждый раз «description» становился «title» br «base_description»
Редактировать
Вы можете попробовать что-то подобное, что будет работать в 95% случаев, пока заголовок не изменится, и в этом случае вы получите накопленные исторические заголовки. Это также не работает, когда заголовок содержит %
символ, и может работать забавно, если он содержит _
символ.
UPDATE cas_phocagallery, cas_phocagallery_categories
SET cas_phocagallery.description=concat(
cas_phocagallery_categories.title,'<br />',cas_phocagallery.description)
WHERE cas_phocagallery.catid = cas_phocagallery_categories.id
AND NOT cas_phocagallery.description
LIKE concat(cas_phocagallery_categories.title, '%')
Не могу прокомментировать Joomla или то, как она что-то делает, или почему это было бы необходимо (для объединения заголовка с описанием). Что вам действительно следует сделать, так это в некотором операторе SELECT в некотором модуле показать результат CONCAT вместо того, чтобы сохранять (вставлять / искажать) его в описание.
SELECT cas_phocagallery.*, concat(cas_phocagallery_categories.title,
'<br />',
cas_phocagallery.description) as FullDescription
FROM cas_phocagallery
LEFT JOIN cas_phocagallery_categories
ON cas_phocagallery.catid = cas_phocagallery_categories.id
Комментарии:
1. Да, это то, что я имею в виду. На самом деле, что мне нужно сделать, это добавить заголовок элемента, который находится в одной таблице, к описанию, которое находится в другой таблице. И оба элемента являются частью модуля, созданного в joomla. Поэтому я не уверен, что обновление — это правильное действие, которое нужно предпринять. Я действительно не так хорош в программировании mysql, и это действие должно быть вставлено в php и вызвано из меню администратора в joomla. Вам нужна дополнительная информация?
2. Это работает отлично, именно то, что мне было нужно. Что вы имели в виду, говоря о необходимости объяснить снижение? Как мне приступить к голосованию?