Avatar billede zaittam Nybegynder
01. oktober 2006 - 16:57 Der er 2 kommentarer

Avanceret MySQL-query

Hej eksperter!

Jeg skal bruge en forholdsvis avanceret (det synes jeg ihvertfald) MySQL query, der skal hente fra to forskellige tabeller.

Den første tabel hedder tingpriser.

Den anden tabel hedder tingogpriser.

Jeg bruger tabellerne til en mindre prisdatabase. Tabellen "tingpriser" indeholder priserne, sådan at man på en lille oversigt kan se de seneste ændringer i priserne for hver enkelt ting. Tabellen "tingogpriser" indeholder informationer om hver enkelt ting.

Nu kommer det svære. Jeg vil gerne - i PHP - have en query, der henter oplysninger om de 3 senest opdaterede ting (altså en simpel select from tingpriser where ting=$tingid order by id desc limit 3), der så samtidig skal hente oplysninger om tingen fra tabellen tingogpriser. DERUDOVER skal den, for de 3 senest opdaterede ting, hente den næstseneste pris, så jeg kan smide et lille ikon ind for, hvor vidt prisen er steget eller er faldet..

Anyone?
Avatar billede zaittam Nybegynder
01. oktober 2006 - 17:10 #1
Jeg bruger lige nu følgende kode:

                $query = mysql_query("SELECT * FROM tingpriser t, tingogpriser p WHERE t.ting = p.id ORDER BY t.id DESC LIMIT 3");
                echo'
                <table border="0" width="100%" cellpadding="0" cellspacing="2">
                ';
                while($row = mysql_fetch_assoc($query)) {
                    $nupris = $row[pris];
                    $psofa = $nupris / 50;
                   
                    $q = mysql_query("SELECT * FROM tingpriser WHERE ting='$row[id]' ORDER BY id DESC LIMIT 1,1");
                    $r = mysql_fetch_assoc($q);
                    $forpris = $r[pris];
                    if($nupris < $forpris) {
                        $pricecode = "ned";
                    } else {
                        $pricecode = "op";
                    }
                    ?>
                    <tr>
                        <td height="32" width="30" style="border: 1px solid #000000"><center><a href="java script:popUp('<?=$fuldurl?>tingogpriser/index.php?id=<?=$row[id]?>', 500, 550);"><img src="<?=$row[lillebillede]?>" border="0"></a></center></td>
                        <td><b><a href="java script:popUp('<?=$fuldurl?>tingogpriser/index.php?id=<?=$row[id]?>', 500, 550);"><?=$row[navn]?> <?=$pricecode?></a></b><br><div align="right"><i><?=$psofa?> HC / <?=$nupris?> mønter</i></div></td>
                    </tr>
                    <?
                }
                echo'
                </table>
                ';

Men den bruger en DEL select-queries og belaster således serveren en del.. Kan det ikke skrives sammen i en query?
Avatar billede kjulius Novice
03. oktober 2006 - 01:27 #2
Måske sådan her?

SELECT t1.id, p.*, t1.pris, t2.pris as tidlpris
FROM tingogpriser p
INNER JOIN tingpriser t1 ON t1.ting = p.id
INNER JOIN tingpriser t2 ON t2.ting = p.id
WHERE t2.id = (SELECT MAX(id) FROM tingpriser WHERE ting = p.id and id < t1.id)
ORDER BY t1.id DESC
LIMIT 3

Forespørgslen kræver, at du har en MySQL version >= 4.1
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