Javascript 在输出中使用AJAX/多个sql语句显示外键描述而不是值
一般来说,我使用3个不同的表(3个级别),每个表都使用外键引用上一个表。第二级表有一个外键,它引用上一级表,第三级表也引用第二级表。 我目前正在多选下拉列表中显示所有这些值。第三级multiselect下拉列表当前显示第二级multiselect下拉列表中的外键值。我要做的就是更改外键值以显示第二级表中的描述。 这是optgroup中外键值的当前外观: () 到目前为止,我总是通过创建另一个sql语句来实现这一点,该语句根据第二级表中的id选择描述。我不知道如何才能做到这一点,因为目前我有一个带有multiselect函数的javascript,它通过ajax访问php文件,ajax包含sql语句和输出。 为了提供更好的概述,我附上了重要的代码部分:Javascript 在输出中使用AJAX/多个sql语句显示外键描述而不是值,javascript,php,sql,ajax,mysqli,Javascript,Php,Sql,Ajax,Mysqli,一般来说,我使用3个不同的表(3个级别),每个表都使用外键引用上一个表。第二级表有一个外键,它引用上一级表,第三级表也引用第二级表。 我目前正在多选下拉列表中显示所有这些值。第三级multiselect下拉列表当前显示第二级multiselect下拉列表中的外键值。我要做的就是更改外键值以显示第二级表中的描述。 这是optgroup中外键值的当前外观: () 到目前为止,我总是通过创建另一个sql语句来实现这一点,该语句根据第二级表中的id选择描述。我不知道如何才能做到这一点,因为目前我有一个带
//Javascript
$('#idsecondlevel').multiselect({
onChange:function(option, checked){
//Store selected value in array format in selected variable
var selected = this.$select.val();
if(selected.length > 0){
$.ajax({
url:"http://localhost:8080/fetch_xx.php",
method:"POST",
data:{selected:selected},
success:function(data){
$('#idthirdlevel').html(data);
$('#idthirdlevel').multiselect('rebuild');
}
})
}
}
});
为了确保我的理解正确:第二级和第三级的内容是根据父表中的选定值动态显示的。所以基本上,你想让用户在第二级表格中选择一些/多个东西,然后让他在第三级表格中进入更多细节? 在屏幕截图中,您标记了1、2等。是否要显示父表中所选id的描述 如果是这样,为了避免另一个SELECT语句,可以使用联接。查看您的代码,您可能希望使用内部联接。要给出第三级选择的示例,请检查下面的伪代码。您可能希望以类似URL的方式显示分类历史记录(例如“abc/xyz”作为标题,下面有三级选项),因此您还需要一级描述。如果没有,只需删除相应的列即可。要与php集成,只需与所选选项的id进行比较
SELECT a.id, a.description, b.id, b.foreign_key_firstlevel, b.description, c.id, c.foreign_key_secondlevel, c.description
FROM first_level_table AS a
INNER JOIN second_level_table AS b ON a.id = b.first_level_foreignkey
INNER JOIN third_level_table AS c ON b.id = c.second_level_foreignkey;
我想到的另一件事是:1-3级的内容是相当静态的,所以为什么不使用视图呢?当然,这也有局限性,但由于您似乎只选择了值,所以这不应该困扰您。联接需要大量计算,如果计算过多,会降低计算速度。您可以使用准备好的视图来解决这个问题。因为我不知道您的数据库结构,伪代码可能看起来像这样:
CREATE VIEW view_allselectoptions AS
SELECT a.id, a.description, b.id, b.foreign_key_firstlevel, b.description, c.id, c.foreign_key_secondlevel, c.description
FROM first_level_table AS a, second_level_table AS b, third_level_table AS c
WHERE a.id = b.foreign_key_firstlevel
AND b.id = c.foreign_key_secondlevel;
您也可以在视图中使用连接。代码将与上面的代码类似。非常感谢Lino!我按照您上面描述的方式创建了一个视图,并且必须添加内部连接才能正常工作。因此,具有两个级别的最终版本将是:创建视图视图所有选择选项,如选择a.id、a.description、b.id、b.foreign\u key\u firstlevel、b.description FROM first\u level\u table内部将第一个\u level\u表连接为a,将第二个\u level\u表连接为b ON a.id=b.foreign\u key\u firstlevel;
SELECT a.id, a.description, b.id, b.foreign_key_firstlevel, b.description, c.id, c.foreign_key_secondlevel, c.description
FROM first_level_table AS a
INNER JOIN second_level_table AS b ON a.id = b.first_level_foreignkey
INNER JOIN third_level_table AS c ON b.id = c.second_level_foreignkey;
CREATE VIEW view_allselectoptions AS
SELECT a.id, a.description, b.id, b.foreign_key_firstlevel, b.description, c.id, c.foreign_key_secondlevel, c.description
FROM first_level_table AS a, second_level_table AS b, third_level_table AS c
WHERE a.id = b.foreign_key_firstlevel
AND b.id = c.foreign_key_secondlevel;