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


Linking Multiple Columns from two tables via 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;

,更具体地说,到"="。"部分,但我根本不知道如何解决这个特定的问题。也许这是我的一个假设(如果变量参数$ suggst_a有一个特定的名称有关系吗?),或者可能是函数设计中的一个错误-当我使用原始示例时,它工作了,尽管原始参数/变量没有其他对应。

现在,我知道这与我提到的JOIN表有很大的不同,但这是我能够弄清楚如何实现这一点的最接近的方法。如有帮助,不胜感激。

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

好吧,这太尴尬了——我已经解决了我自己的问题。这不是函数定义本身的问题,而是输出的问题。

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

我错误地使用了与定义函数($ suggst_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给我的关于表格结构的建议,下次我一定会好好利用的。