1

何をすべきかわからないシナリオがあります。

ユーザーが自分のステータスを更新できる Web サイトがあります。ハッシュタグの使用を許可しているので、ユーザーの投稿は次のようになります。

今日は最高のハイキングに行きました!! #ハイキング

ここで、次のように構成された「POSTS」という適切な名前のテーブルに投稿を保存するつもりです。

post_id | user_id | text | date

ここで、ユーザーが投稿テキストを保持するフォームを送信すると、スクリプトを実行して配列を作成し、ユーザーが使用したすべてのハッシュ タグ用語を取得して配列に格納します。そのため、その配列をループして、適切な名前の「TAGS」テーブルにタグを挿入できます。このテーブルの構造は次のとおりです。

tag_id | post_id | user_id | tag

これに関する唯一の問題は、データを「POSTS」テーブルに挿入するまで、投稿の post_id がわからないことです (post_id は主キーであり、自動インクリメントです)。ここで、そのユーザーの「POSTS」テーブルからデータの最後の行を SELECT するだけでよいと考えていました (投稿を挿入した後)。次に、返された post_id をクエリに使用して、タグ データを「 TAGS」テーブル。これは最善の方法ではないようですか?私の質問は:

これは最善の解決策ですか、それともこのシナリオを実行するためのより良い方法はありますか?

私は Stack Overflow を初めて使用するので、反対票を投じないでください。コメントして、私が間違っていることを教えてください。私は学び、より良い質問をします.

ありがとう

4

3 に答える 3

1

最後に挿入された ID は非常に簡単に取得できます。PDO を使用しない場合は mysql_insert_id()、使用する場合は関数 lastInsertId() を使用します。

于 2013-04-25T16:26:26.970 に答える
0

この種類は、使用している mysql のバージョンと、コードをどのように編成するかによって異なります。

オプション 1. あなたが言ったことを正確に実行します。PHP には、データベースを管理するためのコードと、データをデータベースに格納する方法が含まれます。あなたが概説したことで私が見る唯一の欠点は、ハッシュタグの処理に問題がある場合、データベースに挿入された投稿がある可能性がありますが、ハッシュ部分は正常に完了しませんでした. 特定のアプリケーション (銀行口座など) では、これは受け入れられない場合があり、これがデータベース トランザクションの目的です。

オプション 2. これを処理する別の方法は、ハッシュ タグの挿入と処理の両方を行う mysql ストアド プロシージャを作成することです。ストアド プロシージャは、データベースの一貫性を保つために、トランザクション全体をラップすることもできます。これには、ストアド プロシージャをサポートするバージョンの mysql が必要であることに注意してください。これを行うことの悪い面は、PHP とは異なる mysql で記述しなければならないことです。

mysql と PHP の両方で、このアプリケーション ロジック/データストア ロジックを処理できます。コードをどのように編成するかが重要です。レイヤーを区別しておくことをお勧めします。これを PHP で行う場合でも、少なくともデータベースを処理する別のクラスを用意し、他には何も行わないようにします。コードが大きくなった場合、これらのタイプのコードを管理する別のクラス、モジュール、または名前空間を持つことで、コードの変更とテストが本当に簡単になります。

于 2013-04-25T16:37:46.120 に答える
0

データベースにクエリを実行する前に、コードで生成した文字列を保持する新しい列 (unique_id) を両方のテーブルに作成します。そうすれば、送信前に投稿とタグを結び付けるための ID を取得できます。私は、同様のアプリケーションに対して常にこの方法を使用しています。

唯一の問題は一意性ですが、一意の ID を生成するさまざまな方法があります (私は通常、タイムスタンプとハッシュを組み合わせて使用​​します)。

于 2013-04-25T16:27:58.643 に答える