2012-03-26 12 views
2

以下はサーバー側の処理をしないコードですが、多くの行が生成され、大幅に成長するため、サーバー側の処理を使用する必要があります。Datatablesサーバー側処理INNER JOINまたは複数のテーブル


DBテーブル(ないすべてのフィールドが含まれているが、これらは私が欲しいものであり、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 /じぶんの');


INNERため、この作業は、サーバー側の処理を行わず

$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バージョンのJOINになります。

$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に組み込むことはできますか?

ご指摘いただければ幸いです。 ありがとうございます。やるクエリをログに記録する -

答えて

3

回答質問へのスクリプトの同じディレクトリにlogging.txtファイルを持っている必要があります。 問題は2 coluを有していましたmnは同じ名前なので、私は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()); 
2

はい私はあなたが内部結合(しかし、私は、正確なクエリを記述するために、テーブルの詳細が必要)、その後、あなたがここに

$sQuery = " 
    SELECT SQL_CALC_FOUND_ROWS ".str_replace(" , ", " ", implode(", ", $aColumns))." 
    FROM $sTable 
    $sWhere 
    $sOrder 
    $sLimit 
"; 
$rResult = mysql_query($sQuery, $gaSql['link']) or die(mysql_error()); 

EDITをSQLをmustmodify使うべきだと思います

$filename = __DIR__.DIRECTORY_SEPARATOR."logging.txt"; 

file_put_contents($filename, $sQuery, FILE_APPEND); 

あなたは

+0

:私はDB構造の問題を修正した:ニコラPeluchetti。ありがとうございました – Codded

+0

@:Nicola Peluchetti:INNER JOINの最新情報、これは正しいですか? – Codded

+0

@Coddedはいそれはうまくいくはずですが、いずれにせよ、あなたはfirephpを使用してクエリをログに記録し、mysqlで正しいことを確認する必要があります –

関連する問題