2012-02-12 11 views
0

私は各行がポッドキャストのエピソードを表すMySQLデータベースを持っています。私は各エピソードごとにショーノートを入れたいので、PHP経由で行ごとに複数のリンクを抽出できる必要があります。mysqlの1行に複数のリンク

これを達成するための最良のデータフィールドは何でしょうか?私はリンクテーブルを介してリンクを含むことがこれを行う唯一の方法かもしれないと思っていますが、誰かがもっと簡単な方法を知っていれば、それについて聞きたいです。

+0

あなたのアイデアかもしれない非常によく:例えば

$links= $row['links']; // your links in row $links_array = explode("," , $links);// now you have an array that you can easily access to each block of it. 

あなたが探しているものになります。少し簡単にしたい場合は、追加のCLOBフィールドとしてエピソードに関連付けられたリンクのリスト、つまり単一の行を追加し、シリアル化された配列をそこに格納することができます(php serializeまたはJSON-notationのいずれか)。あなたの質問は、これらのリンクが各エピソードの説明のようなものか、タグのようなものか、つまり同じページにリンクしているエピソードを見つけることができるかどうかについて少し曖昧です。 – dbrumann

答えて

1

ポッドキャストあたりのリンク数が柔軟であるため、新しいテーブル(podcast_link)の使用をお勧めします。 textフィールドをpodcastテーブルに追加すると、リンクを表示したいときに解析するため効率的ではありません。 これにより、たとえばポッドキャストあたりのリンク数を数えると、「関連リンクを表示する(4)」と表示され、リンクにフィールドを追加することができます。リンクだけでなくリンクのタイトルも表示できます。特に、リンクごとに情報を追加したい場合があります。

+0

これは間違いなく最も魅力的です私への道。あなたは正しいです、それは後で拡張機能も開きます。 – Ryan

+0

PHPでいくつかのリンクを解析する場合とJOINを使用するより複雑なMySQLクエリを実行する場合のパフォーマンスの差は、おそらく無視されます(存在する場合でも)。また、PHP配列のシリアライズ/シリアライズを使用する場合、リンク数のカウントやタイトルの提供も可能です。私は、追加のテーブルを使うことは、将来の証明であること、すなわち追加の機能を提供することに同意します。どのエピソードが同じリンクを参照しているか、いくつのエピソードがリンクを使用しているかを表示しますが、あなたの例では、追加のフィールドだけで同じことができるため、この利点は示されません。 – dbrumann

+1

シリアル化された配列を使用すると、クエリでカウントを行うのではなく、カウントを表示したい場合でも、毎回完全な配列を解析する必要があります。これは正規化の基本でもあり、データをより使いやすく、使いやすく、管理しやすくします。 "あなたの例はこれの利点を示していません" - 私が望むデータベースの全機能をリストアップするとは期待できません。 – Richard

0

explode()機能:

あなたはこのような構造で、たとえば、あなたのリンクを保存する必要があります。データベースの行で http:\\example.com\podcast01.mp3,http:\\example.com\podcast02.mp3,http:\\example.com\podcast03.mp3。あなたがそれらを抽出したいとき

あなたは簡単にこの方法でexplode()機能を使用することができます。

echo ($links_array[0]);// output : http:\\example.com\podcast01.mp3 

幸運

+0

リンクの1つにコンマが含まれているとどうなりますか? – Arjan

+0

これは簡単な例です!いくつかの空間を使用することができます。自分自身やリンク間に '|'を使います。 – bizzr3

+0

これは良い提案ですが、私は別の答えの一つで別のテーブルコンセプトに行くつもりだと思います。 – Ryan

関連する問題