2013-04-25 2 views
1

У меня есть сценарий, в котором я не уверен, что делать.Сохранение значений в двух таблицах MySQL

У меня есть сайт, на котором пользователь может обновить свой статус. Я разрешаю использовать хэш-теги, поэтому может появиться возможный пост пользователя:

Пошел сегодня на большой поход! #hiking

Теперь я намерен сохранить пост в таблице с соответствующим названием «ПОСТЫ», которая структурирована следующим образом:

post_id | user_id | text | date 

Теперь, когда пользователь отправляет форму, которая занимает пост текст Я бегу сценарий для создания массива, чтобы получить все теги хэш-тегов, которые использовали пользователь, а затем сохранить их в массиве. Итак, я могу прокрутить этот массив и вставить теги в точно подобранную таблицу «TAGS». Теперь структура этой таблицы такова:

tag_id | post_id | user_id | tag 

Единственная проблема состоит в том, что я не знаю post_id пост, пока я вставить данные в таблицу «ДОЛЖНОСТЬ» (post_id является первичным ключом и является автоматическим приращением). Теперь я думал, что могу просто выбрать последнюю строку данных из таблицы «POSTS» для этого пользователя (после ввода сообщения), а затем, в свою очередь, использовать возвращаемый post_id для моего запроса, который вставляет данные тега в Таблица «ТЕГИ». Кажется, это не самый лучший способ? Мой вопрос:

Это лучшее решение или есть лучший способ пойти по этому сценарию?

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

Благодаря

+0

Может ли быть проще создать функцию PHP, которая вставляет/обновляет сообщение, и эта функция также создаст/удалит старые теги? –

+1

«не голосуйте», не так ли? Мы славные люди большую часть времени – boisvert

ответ

0

Имейте новый столбец в обеих таблицах - unique_id - который содержит строку, которую вы генерируете в коде перед запросом базы данных. Таким образом, у вас есть идентификатор, чтобы связать сообщения и метки вместе перед отправкой. Я использую этот метод все время для подобных приложений.

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

+1

Это была мысль, я был рад, что вы это сказали! Спасибо! – user2320500

1

Вы можете получить последний insterted ID очень просто: mysql_insert_id(), если вы не используете PDO или с помощью функции lastInsertId(), если вы делаете.

0

Это зависит от того, какую версию mysql вы используете и как вы хотите организовать свой код.

Вариант 1. Сделайте именно то, что вы сказали. PHP будет содержать код для управления базой данных и как данные хранятся в базе данных. Единственный недостаток, который я вижу в том, что вы наметили, - если есть проблема с обработкой хэштегов, возможно, у вас будет сообщение, которое будет вставлено в базу данных, но хэш-часть не завершилась успешно. Для некоторых приложений (например, банковского счета) это может быть неприемлемым, и для этого необходимы транзакции базы данных.

Вариант 2. Другим способом справиться с этим было бы написать хранимую процедуру mysql, которая выполняет как вставку, так и обработку хэш-тегов. Хранимая процедура также может обернуть все это в транзакцию, чтобы ваша база данных была последовательной. Обратите внимание, что для этого требуется версия mysql, которая поддерживает хранимые процедуры. Плохая сторона этого заключается в том, что вам придется писать в mysql, который отличается от PHP.

Оба mysql и PHP могут обрабатывать эту логику логики приложения/хранилища данных. Речь идет о том, как вы хотите организовать код. Я бы предпочел сохранить разные слои. Даже если вы должны сделать это на PHP, по крайней мере, есть отдельный класс, который имеет дело с базой данных и ничего не делает. Когда ваш код становится больше, наличие отдельного класса или модуля или пространства имен, которое управляет этими типами кода, действительно облегчает их изменение и тестирование.

Смежные вопросы