通过主键链接两个表中的多个列

时间:2011-08-17 21:30:25

标签: php mysql primary-key

我正在设计一个桌子系统,让我可以创建一个小型的计划器。规划器本身是一个HTML表,它使用两个不同的MySQL表。

表格是:

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

Table_2 (song_id, song_title, ...)

表1中的“date_id”列填充了日期,日期,日期,每个日期都有自己的建议组。在表1的每一行中,建议列的单元格分别用表2中“song_id”列中的单个标识号(“1293”,“1185”,“0984”)填充。

我正在试图弄清楚如何生成一个列出日期和建议的HTML表格,但不仅仅是数字,而是显示第二个表格中的歌曲标题。 (还有关于我想要显示的歌曲的其他信息,这就是为什么我有两张桌子而不是一张桌子。)

HTML表最终应如下所示:

HTML_Table(日历日期,歌曲标题a,歌曲标题b,歌曲标题c)

我对PHP / MySQL比较陌生,(并且自学成才,好吧,我有一本书)所以我花了大部分时间来弄清楚我应该如何定义我的问题 - 我现在明白我需要在第二个表中引用主键。我的问题是我该怎么做?我试图弄清楚我是否应该使用某种类型的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表有点不同,但这是我能够找到最合适的方法。任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

你的桌面设计错了。对于具有多列建议的日期而不是单行,该表应该是日期和单个建议,对于给定日期具有多个行。这使您可以对两个表进行简单连接,以获得每个日期的一组建议以及歌曲标题。

答案 1 :(得分: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);

它没有用,因为它没有任何输出。一旦我给它使用了一些东西,它就可以了。

无论如何,感谢Jim Garrison提供关于桌子结构的提示 - 下次这个时候我肯定会利用它。