Hirdetés

Keresés

Új hozzászólás Aktív témák

  • biker

    nagyúr

    válasz hellsing71 #2229 üzenetére

    ennél egyszerűbb

    Nálam több százezer soros táblák lapozóval

    <script>

    $(document).ready(function(){
    $('#naploTabla').DataTable({
    'processing': true,
    'serverSide': true,
    'serverMethod': 'post',
    'ajax': {
    'url':'ajax_naplo_file.php'
    },
    'columns': [
    { data: 'datum' },
    { data: 'esemeny' },
    { data: 'ertek' },
    ]
    });
    });

    </script>

    a feldolgozó pedig

    <?php
    include("master.php");

    // Create connection
    try{
    $conn = new PDO("mysql:host=$host;dbname=$adatbazis","$sql_felhasznalo","$sql_jelszo",
    array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8;',
    PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING,
    ));
    $conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    }catch(PDOException $e){
    die('Unable to connect with the database');
    }
    ## Read value
    $draw = $_POST['draw'];
    $row = $_POST['start'];
    $rowperpage = $_POST['length']; // Rows display per page
    $columnIndex = $_POST['order'][0]['column']; // Column index
    $columnName = $_POST['columns'][$columnIndex]['data']; // Column name
    $columnSortOrder = $_POST['order'][0]['dir']; // asc or desc
    $searchValue = $_POST['search']['value']; // Search value

    $searchArray = array();

    ## Search
    $searchQuery = " ";
    if($searchValue != ''){
    if (substr_count($searchValue, " ")==0)
    {
    $searchQuery = " AND (datum LIKE :datum or
    esemeny LIKE :esemeny ) ";
    $searchArray = array(
    'datum'=>"%$searchValue%",
    'esemeny'=>"%$searchValue%"
    );

    }
    else
    {
    $searchValue_arr=explode(" ", $searchValue);
    $i=1;
    foreach($searchValue_arr AS $expl_value) {
    $searchQuery.= " AND (datum LIKE :datum$i or
    esemeny LIKE :esemeny$i ) ";
    $searchArray = array(
    "datum$i"=>"%$expl_value%",
    "esemeny$i"=>"%$expl_value%"
    );
    }
    }

    }

    ## Total number of records without filtering
    $stmt = $conn->prepare("SELECT COUNT(*) AS allcount FROM fitness_naplo{$_SESSION['helyszin']} ");
    $stmt->execute();
    $records = $stmt->fetch();
    $totalRecords = $records['allcount'];

    ## Total number of records with filtering
    $stmt = $conn->prepare("SELECT COUNT(*) AS allcount FROM fitness_naplo{$_SESSION['helyszin']} WHERE 1 ".$searchQuery);
    $stmt->execute($searchArray);
    $records = $stmt->fetch();
    $totalRecordwithFilter = $records['allcount'];

    ## Fetch records
    $stmt = $conn->prepare("SELECT * FROM fitness_naplo{$_SESSION['helyszin']} WHERE 1 ".$searchQuery." ORDER BY ".$columnName." ".$columnSortOrder." LIMIT :limit,:offset");

    // Bind values
    foreach($searchArray as $key=>$search){
    $stmt->bindValue(':'.$key, $search,PDO::PARAM_STR);
    }

    $stmt->bindValue(':limit', (int)$row, PDO::PARAM_INT);
    $stmt->bindValue(':offset', (int)$rowperpage, PDO::PARAM_INT);
    $stmt->execute();
    $empRecords = $stmt->fetchAll();

    //echo "ok";

    $data = array();

    foreach($empRecords as $row){
    // echo "ok";
    $data[] = array(
    "datum"=>$row['datum'],
    "esemeny"=>translated($row['esemeny'], $_GET['sel_lang']),
    "ertek"=>$row['ertek']
    );
    }

    ## Response
    $response = array(
    "draw" => intval($draw),
    "iTotalRecords" => $totalRecords,
    "iTotalDisplayRecords" => $totalRecordwithFilter,
    "aaData" => $data
    );

    echo json_encode($response);
    ?>

    nyilván testre kell szabnod, de az elv ennyi, ajaxxal hívogatja, és küldi melyik 10 vagy 25 vagy 100 sort kérje le

  • martonx

    veterán

    válasz hellsing71 #2229 üzenetére

    Rosszul állsz hozzá. Mivel lapozást használsz, soha nem kell a teljes táblát listáznod. És biztosra veszem, hogy kettő lekérdezés elég.

    Select akármi from tábla
    Where feltételek (nyilván az alap eset, amikor még where sincs) query

    Ez az alap lekérdezésed, ami csak egy alap, de ilyen formában sose kell lefuttatnod.

    1. lekérdezés: alap query count-ja, azaz maxmimum hány sornyi adatod van (ez is erőforrásigényes tud lenni, de amit mondtál 250k adatsor nudli, majd 6 milliárd sornál ráérhetsz ezen aggodni)
    2. lekérdezés: alap lekérdezés az aktuális page-nek megfelelően (pl. 20-dik pagenek megfelelő 10 sor)

    azaz sose fogsz a megjelenített sorok számánál (pl. 10/20/50/100) többet elkérni a db-től. Hiszen pont erre való a pagelés.

  • nevemfel

    senior tag

    válasz hellsing71 #2229 üzenetére

    Emlékszem, hogy régebben használtam mysql alatt a SQL_CALC_FOUND_ROWS + FOUND_ROWS párost. Ezzel a módszerrel egy lekérdezést meg tudsz takarítani a három közül, de mindenképp érdemes lemérni, melyik módszer mennyi idő-, esetleg egyéb erőforrás nyereséget hoz, mert el tudom képzelni, hogy manapság a mindenféle gyorsítótárazás korában gyakorlatilag semennyi különbség nem lesz.

Új hozzászólás Aktív témák