jquery - Datatables服务器端处理INNER JOIN或多表

标签 jquery jquery-plugins datatables

下面是我的代码,没有服务器端处理,但由于它会产生很多行并且会显着增长,我需要使用服务器端处理。

<小时/>

数据库表(并非包括所有字段,但这些是我想要的字段和 INNER JOIN 的字段):

course_modules -       id (pk), course(course.id), module(module.id), added(UNIXTIMESTAMP)
course -               id (pk), category(course_categories.id), fullname(text)
course_categories-     id (pk), name(text)
modules-               id (pk), name(text)

我希望能够将 UNIXTIMESTAMP 显示为日期('d/m/Y');

<小时/>

这适用于 INNER JOIN

$sQuery = "
    SELECT SQL_CALC_FOUND_ROWS ".str_replace(" , ", " ", implode(", ", $aColumns))."
    FROM   $sTable 
    INNER JOIN modules ON $sTable.module = modules.id 
    INNER JOIN course ON $sTable.course = course.id 
    INNER JOIN course_categories ON course.category = course_categories.id
    $sWhere
    $sOrder
    $sLimit
";
<小时/>

未经服务器端处理的原始 php 版本:

$mods = get_records_sql("SELECT * FROM {$CFG->prefix}course_modules");

foreach ($mods as $mod)
    {

    $thecourse = get_record('course','id',$mod->course); 
    $themodule = get_record('modules','id',$mod->module); 
    $thecat = get_record('course_categories','id',$thecourse->category); 


    echo '<tr>'; 
    echo '<td>'.$thecat->name.'</td>'; 
    echo '<td>'.$thecourse->fullname.'</td>'; 
    echo '<td>'.$themodule->name.'</td>'; 
    echo '<td>';
    echo date('d/m/Y', $mod->added);
    echo'</td>'; 
    echo '</tr>'; 
    } 

我的服务器端处理可以很好地处理我的数据表,但没有链接到其他表。该表仅返回 ID,我希望能够从另一个表中获取值,如上所示。

我需要使用内部联接吗?如果是这样,我如何与 server_processing.php 脚本合并: 我用的是这个:http://datatables.net/release-datatables/examples/data_sources/server_side.html

或者我可以将上述方法合并到 server_processing.php 中吗?

任何指导将不胜感激。 提前致谢。

最佳答案

回答问题: 问题是有 2 个列名相同,所以我在 SQL 查询中使用了 alises。 也没有使用INNER JOIN。

使用别名和列名的列数组:

$aColumns = array( 'catname', 'fullname', 'modulename', 'added');

4个表的SQL查询:

$sQuery = "
    SELECT mdl_course.fullname, mdl_modules.name AS modulename, mdl_course_categories.name AS catname, mdl_course_modules.added
    FROM  mdl_course_modules, mdl_modules, mdl_course, mdl_course_categories
    WHERE mdl_course_modules.module = mdl_modules.id AND mdl_course_modules.course = mdl_course.id AND mdl_course.category = mdl_course_categories.id
    $sOrder
    $sLimit
";
$rResult = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error());

关于jquery - Datatables服务器端处理INNER JOIN或多表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9870154/

相关文章:

javascript - 在 jQuery 插件的属性中未定义对对象方法的引用

javascript - 使用不再更新的插件

javascript - jquery 数据表默认排序

javascript - 对于选项卡内动态添加的按钮,单击事件不会触发

javascript - Jquery 在父级之外查找 ID 或表单

jquery - multipart=true 和显示上传百分比之间的plupload 连接

javascript - 获取当前的 <li> 号码

javascript - jQuery 表单插件 - 中止请求

jquery - 使用 Dynatable 插件更新表格

jquery - 如何捕获使用 DataTables 插件分页的复选框的值