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

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