我正在设计一个表系统,它可以让我创建各种各样的小计划器。规划器本身是一个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给我的关于表格结构的建议,下次我一定会好好利用的。