Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> SQLite3 odczyt z ogromnej ilości tabel.
xvidasd
post 5.01.2015, 19:16:36
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 5.01.2015

Ostrzeżenie: (0%)
-----


Witam.
Od kilku dni próbuje rozgryźć SQLite3 i wertuję net w poszukiwaniu rozwiązania i nic sensownego nie znajduję. Dlatego postanowiłem, poprosić Was, czyli specjalistów o pomoc.

Mam bazę, w której jest blisko tysiąc tabel. W każdej z nich są po trzy kolumny (id, rating,ip) - są więc takie same (znajdują się w nich tylko różne dane).

Chciałbym odczytać i porównać dane ze wszystkich na raz (rekord rating gdzie ip=1).

Nie da się więc przy pomocy UNION bo niby jak? Mam tysiąc razy to powtórzyć? Nie da się też zastosować zmiennej po FROM więc jak?

Najlepiej by było tak: - najpierw pobieram nazwy tabel (name) i od razu pobieram dane z tabel z pola "rating" (gdzie id jest równe 1) :

Kod
<?php
try
{
    $db = new PDO('sqlite:./rating/database/ratings2.sqlite');
}
catch (PDOException $e)
{
    print "Błąd połączenia z bazą!: " . $e->getMessage() . "<br/>";
    die();
}

$statement = $db->query('SELECT name FROM sqlite_master UNION SELECT rating FROM name WHERE id="1" ');
foreach($statement as $wiersz)
{
    echo(" = ".$wiersz['name']."<br />");
    echo(" = ".$wiersz['rating']."<br />");
}
$statement->closeCursor();
?>


Ale to oczywiście nie może działać...

Może więc podmieniać nazwy tabel pod $zmienna i w ten sposób odczytywać pola rating ze wszystkich tabel?

Kod
$statement = $db->query('SELECT name FROM sqlite_master UNION SELECT rating FROM $zmienna WHERE id="1" ');
foreach($statement as $wiersz)
{
    echo(" = ".$wiersz['name']."<br />");
    echo(" = ".$wiersz['rating']."<br />");
    $zmienna = $wiersz['name'];
}

Bez szans... - też nie zadziała...

Czy ktoś ma jakiś pomysł? Nie wiem w którym kierunku iść...
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
xvidasd
post 6.01.2015, 09:49:21
Post #2





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 5.01.2015

Ostrzeżenie: (0%)
-----


Jezuuu "czeski błąd" oneeyedsmiley02.png
Wiedziałem, że utknąłem na jakiejś bzdecie.

Dziękuję - zabieram się za testy.

Zrobiłem troszkę inaczej i działa!
Kod
<?php
try
{
    $db = new PDO('sqlite:./rating/database/ratings2.sqlite');
}
catch (PDOException $e)
{
    print "Błąd połączenia z bazą!: " . $e->getMessage() . "<br/>";
    die();
}
$tables = array();
$tabless = array();
$statement = $db->query("SELECT name FROM sqlite_master");
foreach($statement as $wiersz)
{
    $i = $wiersz['name'];
    
    $statementt = $db->query("SELECT rating FROM {$i} WHERE id='1'  ");
    foreach($statementt as $wierszz)
        {  
         $tables[] = $wiersz["name"];
         $tabless[] = $wierszz["rating"];
        }
}
$statement->closeCursor();

arsort($tabless);
foreach ($tabless as $klucz => $wartosc)
        {
        echo $tables[$klucz];
        echo $wartosc."<br />";
        }
?>

Zamiast UNION najpierw odczytuję nazwy tabel a potem w pętli odczytuję dane z tabel.
Dziękuję za natchnienie i pomoc smile.gif
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 16.06.2024 - 12:32