Avatar billede larsgrau Forsker
19. august 2020 - 09:46 Der er 5 kommentarer og
1 løsning

sqlite merge forespørgelser

Hej

Jeg har to sqlite database en med gammel data i og en med nyt data i, jeg kunne godt tænke mig at kunne søge i begge databaser på en gang.
jeg har prøver følgende
$reshis = $dbHIS->query("Select * from signal");
$resny = $dbNY->query("Select * from signal");
$merge = $reshis and resny;
while($row = $merge->fetchArray()){
}

query virker hver for sig

Men det virker ikke hele, noget ideer ?
Avatar billede thomas_bk Ekspert
19. august 2020 - 09:58 #1
Et forslag vil være at lave to queries, en for hver database og så en query der kæder de to andre queries sammen.
Avatar billede larsgrau Forsker
19. august 2020 - 11:54 #2
Det har jeg gjort, men hvor sætter jeg dem sammen ?
Avatar billede Slater Ekspert
19. august 2020 - 15:20 #3
Det kan du ikke let fordi dine results vil være af klassen SQLite3Result, som ikke kan merges med almindelige array-funktioner eller lignende. Du er simpelthen nødt til at køre dem efter hinanden - f.eks:

$restotal = [];
while($row = $reshis->fetchArray()){
  $restotal[] = $row;
}
while($row = $resny->fetchArray()){
  $restotal[] = $row;
}
Avatar billede olsensweb.dk Ekspert
19. august 2020 - 16:34 #4
forudsat at de 2 databaser er på sammen server, sammen database brugernavn/password, sammen database type, kan man vel lave noget ala

$sql = "select database1.signal.*, database2.signal.* FROM database1.signal JOIN database2.signal ON database1.signal.xx = database2.signal.yy";
$reshis = $dbHIS->query($sql);
while($row = $reshis->fetchArray()){
  print_r($row);
}


det kan man da i mysql, så jeg tænker også SQLite
Avatar billede arne_v Ekspert
19. august 2020 - 16:51 #5
Ideen med at have to forskellige databaser - en med gamle data og en med nye data er tvivlsom.

Hvis det er et givet design, så er den simple løsning 2 queries.

Men vil du absolut have 1 query, så brug ATTACH og UNIONÆ


<?php
define('DIR', 'C:\\work\\');

// setup
function credb($dbnam, $start, $end) {
    $db = new SQLite3(DIR . $dbnam);
    $db->exec('CREATE TABLE t (f INTEGER NOT NULL PRIMARY KEY)');
    for($i = $start; $i <= $end; $i++) {
        $db->exec("INSERT INTO t VALUES($i)");
    }
    $db->close();
}
credb('gl.db', 1, 3);
credb('ny.db', 4, 6);

// test single
function test($dbnam) {
    $db = new SQLite3(DIR . $dbnam);
    $q = $db->query('SELECT f FROM t');
    while($row = $q->fetchArray()) {
        echo $row['f'] . "\r\n";
    }
    $db->close();
}
test('gl.db');
test('ny.db');

// test multi
$db = new SQLite3(':memory:');
$db->exec("ATTACH '" . DIR . "gl.db' AS gl");
$db->exec("ATTACH '" . DIR . "ny.db' AS ny");
$q = $db->query('SELECT f FROM gl.t UNION SELECT f FROM ny.t');
while($row = $q->fetchArray()) {
    echo $row['f'] . "\r\n";
}
$db->close();

?>
Avatar billede larsgrau Forsker
03. september 2020 - 10:54 #6
Jeg har lavet 2 div, en der displayer den gamle database og en som display den ny database
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester