2011-08-17 1 views
2

私は、小さなプランナーを作成するためのテーブルシステムの設計に取り組んでいます。プランナー自体は、2つの異なるMySQLテーブルを描画するHTMLテーブルです。プライマリキーを使用して2つのテーブルの複数の列をリンクする

テーブルは、表1の

Table_1 (date_id, suggestion_1, suggestion_2, suggestion_3, ...) 

Table_2 (song_id, song_title, ...) 

「date_id」カラムは提案の独自のグループをそれぞれ有する、日付、ウェルのカレンダーが充填されています。表1の各行において、提案列のセルは、それぞれ表2の「song_id」列から引き出された単一の識別番号(「1293」、「1185」、「0984」)で個々に満たされる。

私は日付と提案を記載したHTMLテーブルを生成する方法を理解しようとしていますが、数字の代わりに2番目のテーブルの曲タイトルが表示されます。 (私が表示したい曲についての他の情報もあるので、1つではなく2つのテーブルがある)。

HTMLのテーブルには、最終的には次のようになります。

たHTML_Table(カレンダーの日付、曲のタイトル、曲のタイトルB、曲のタイトルC)

は、私はPHP/MySQLの、の比較的新しいです(と私は自分の問題をどのように定義すべきかを理解するために、ほとんどの日が私を連れてきました。私は今、2番目の表の主キーを参照する必要があることを理解しています。私の問題はどうしたらいいの?私は何らかの種類のJOINを使うべきかどうかを考えようとしていますが、私はまったく新しいものではありません。

私が使用している本は、私は私の個人的な使用のために改変本の特定のインスタンスのための関数の例を与えた:

その下
//convert the number of the 1st suggestion into a title 
function get_suggest1($suggest_a) { 
global $db; 
$query = 'SELECT 
    song_title 
    FROM 
    draftsongref 
    WHERE 
    song_id = ' . $suggest_a; 
    $result = mysql_query($query, $db) or die(mysql_error($db)); 
$row = mysql_fetch_assoc($result); 
extract($row); 
return $song_title; 
} 

、私も含ま:

//retrieve the suggestions for the mass 
$query = 'SELECT 
    date_id, suggestion_1 
FROM 
    draft_suggestions 
ORDER BY 
    date_id ASC'; 
$result = mysql_query($query, $db) or die (mysql_error($db)); 
... 
// loop through the results 
while ($row = mysql_fetch_assoc($result)) { 
extract($row); 
$suggest1 = get_suggest1($suggest_a); 

を... $suggest1変数を使用して、指定された提案の特定のsong_titleを出力できます。私の問題は、その関数を実行するたびにエラーメッセージが表示されることです。

You have an error in your SQL syntax; 
check the manual that corresponds to your 
MySQL server version for the right syntax 
to use near '' at line 6 

は今、私はこれまでのところ、それはこれに言及だということを把握するために管理してきました:

WHERE 
    song_id = ' . $suggest_a; 

をそして、より具体的には、 "= '$のsuggest_a;"しかし、私は単にその特定の問題を解決する方法を理解することはできません。たぶん私の前提(可変引数$ suggest_aに特定の名前があるかどうかは関係ありません)、あるいは関数の設計上の誤りかもしれません。元の例を使用したとき、元の引数/変数は他の通信者はいなかった。

ここで私が言及したJOINテーブルとは少し違っていると理解していますが、これはどのようにしてこれを実現するかを理解するのに最も近かったものです。どんな助けも認められるでしょう。

答えて

1

あなたのテーブルデザインは間違っています。提案の複数の列を持つ日付の単一の行の代わりに、その表は日付と複数の行を含む単一の提案でなければなりません。これにより、2つのテーブルを簡単に結合して、曲名と共に各日付の提案を得ることができます。

+0

これは、特定の日付ごとに1つのテーブルを作成することを意味しますか? (私が間違っていれば申し訳ありません)。 – Caljay

+0

ああ、待って、心配しないで。私はdate_id列の情報が3番目のテーブルに対応しているので、この方法が必要だと思うのですが、それは別の問題です。私は実際に関数をそのまま動作させることに本当に関わっています。 (それは私のテーブルではないので、私はそれのようにそれを変更する権限を持っていない)。 – Caljay

0

これは恥ずかしいです - 私は自分自身の問題を解決しました。それは出力問題であったのと同じくらい、関数定義の問題ではありませんでした。

// loop through the results 
while ($row = mysql_fetch_assoc($result)) { 
extract($row); 
$suggest1 = get_suggest1($suggest_a); 

私は間違っ機能($のsuggest_a)を定義するのではなく任意の情報を照会して何かをやってから、同じ引数の変数を使用していました。

//retrieve the suggestions 
$query = 'SELECT 
    date_id, suggestion_1 
FROM 
    draft_suggestions 
ORDER BY 
    date_id ASC'; 
$result = mysql_query($query, $db) or die (mysql_error($db)); 

私の代わりに、関数の使用に適切な列の変数を落としてきたはずです。

// loop through the results 
while ($row = mysql_fetch_assoc($result)) { 
extract($row); 
$suggest1 = get_suggest1($suggestion_1); 

それは出力に何も持っていなかったので、それは動作しませんでした。一度私はそれを使用する何かを与え、それは正常に働いた。

いずれにしても、ジム・ギャリソンにはテーブル構造に関するヒントをいただき、ありがとうございます。次回この機能が有効になることを忘れないでください。