MySQL - Nejnovější záznamy ze dvou tabulek Vyřešeno

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Uživatelský avatar
kuxik009
Level 2.5
Level 2.5
Příspěvky: 338
Registrován: únor 13
Pohlaví: Muž
Stav:
Offline
Kontakt:

MySQL - Nejnovější záznamy ze dvou tabulek

Příspěvekod kuxik009 » 19 črc 2016 14:43

Zdravím,

řeším menší problém. Mám dvě tabulky, recepty a recenze, a na hlavní straně chci mít deset nejnovějších příspěvků z obou těchto tabulek. Možná jsem to špatně zformuloval, tak pro jistotu ještě jednou - na hlavní straně chci mít 10 příspěvků, které jsou nejaktuálnější (vybírané z obou tabulek).

Jediné, co mě momentálně napadá, je vybrat z obou tabulek 10 nejnovějších příspěvků, a potom přímo v PHP ze dvaceti příspěvků vybrat deset nejnovějších. To mi ale připadne značně neefektivní, protože bych musel dělat dva dotazy a potom ještě výsledek po výsledku procházet.

Mimochodem, tabulky mají různé sloupce, ale obě mají sloupec datum typu datetime s datem vložení příspěvku, takže podle toho bych to chtěl řadit.

Nevíte prosím někdo, jestli to nejde nějak jednodušeji, ideálně jedním dotazem?

Pravděpodobně to nebude nic těžkého, ale nenapadá mě, co bych měl vyhledat.

Díky moc předem!
Moje portfolio
Český jazyk je freeware, ale nikoliv open source!!!

Sestava:
► Zobrazit spoiler

Reklama
Uživatelský avatar
lamin_cz
Level 2.5
Level 2.5
Příspěvky: 314
Registrován: říjen 12
Bydliště: Kostelec u Holešova
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: MySQL - Nejnovější záznamy ze dvou tabulek

Příspěvekod lamin_cz » 19 črc 2016 15:31

SELECT * FROM recepty, recenze ORDER BY datum LIMIT 10

Ale problém nastane při rozdílných názvech sloupečků ...
  • CPU: Cx6x86L-PR150+
  • MB: XT PRO2
  • GPU: integrovaná
  • RAM: 28Mb SDRAM
PHP, MySQL, HTML, CSS, jQuery ...

Uživatelský avatar
kuxik009
Level 2.5
Level 2.5
Příspěvky: 338
Registrován: únor 13
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: MySQL - Nejnovější záznamy ze dvou tabulek

Příspěvekod kuxik009 » 19 črc 2016 16:34

Díky za odpověď! Tenhle dotaz jsem taky zkoušel, ale ten dělá bordel. V čistém mysql mi to vrací false, v dibi to zase háže 'Column 'datum' in order clause is ambiguous'. A obdobně to dělá i když zkouším řadit třeba podle ID.

Mám teda zavrhnout jeden dotaz a prostě vybrat 10 nejnovějších z obou tabulek a potom to vytřídit v PHP?
Moje portfolio
Český jazyk je freeware, ale nikoliv open source!!!

Sestava:
► Zobrazit spoiler

Uživatelský avatar
lamin_cz
Level 2.5
Level 2.5
Příspěvky: 314
Registrován: říjen 12
Bydliště: Kostelec u Holešova
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: MySQL - Nejnovější záznamy ze dvou tabulek

Příspěvekod lamin_cz » 20 črc 2016 11:02

Protože sloupec datum mají oba dva ... a on neví který použít ... takže to zkus ORDER BY recepty.datum ASC, recenze.datum ASC
  • CPU: Cx6x86L-PR150+
  • MB: XT PRO2
  • GPU: integrovaná
  • RAM: 28Mb SDRAM
PHP, MySQL, HTML, CSS, jQuery ...

Uživatelský avatar
kuxik009
Level 2.5
Level 2.5
Příspěvky: 338
Registrován: únor 13
Pohlaví: Muž
Stav:
Offline
Kontakt:

Re: MySQL - Nejnovější záznamy ze dvou tabulek  Vyřešeno

Příspěvekod kuxik009 » 20 črc 2016 16:44

Díky za odpověď! Tohle už sice něco vypíše, ale funguje to nanejvýš pofidérně. Vypisuje to např. první (tj. nejstarší) recenzi pětkrát, i u recenzí to vypisuje sloupec ingredience, přičemž tabulka recenzí ho vůbec neobsahuje,...

Nakonec jsem to vyřešil přes ty dva dotazy:

Kód: Vybrat vše

        $prispevky = array();
        
$recepty dibi::query("SELECT * FROM [recepty] ORDER BY [datum] DESC LIMIT 10");
        foreach (
$recepty AS $vysledek){
            
$recept = new Recept($vysledek);
            
$prispevky[(string)$recept->datum] = $recept// uložím si instanci do pole, klíč je datum příspěvku
        
}

        
$recenze dibi::query("SELECT * FROM [recenze] ORDER BY [datum] DESC LIMIT 10");
        foreach (
$recenze AS $vysledek){
            
$recenze = new Recenze($vysledek);
            
$prispevky[(string)$recenze->datum] = $recenze// uložím si instanci do pole, klíč je datum příspěvku
        
}

        
krsort($prispevky); // roztřídí pole recenzí a receptů podle klíčů (data) od největšího k nejmenšímu

        
$i 0;
        foreach (
$prispevky as $prispevek) {
            if (
$i <= 10) {
                
$i++;
                
$prispevek->vykreslit();
            } else {
                break;
            }
        } 


Asi to není nejrychlejší možná metoda, ale funguje to, a to mi stačí :lol:
Moje portfolio
Český jazyk je freeware, ale nikoliv open source!!!

Sestava:
► Zobrazit spoiler


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Fúze dvou PC
    od Luis » 10 čer 2023 15:04 » v Rady s výběrem hw a sestavením PC
    4
    677
    od petr22 Zobrazit poslední příspěvek
    11 čer 2023 13:51
  • Scan a tisk u dvou tiskáren
    od amirinda » 14 říj 2023 06:49 » v Vše ostatní (sw)
    12
    1923
    od amirinda Zobrazit poslední příspěvek
    14 říj 2023 16:39
  • Který z těchto dvou mobilů vybrat
    od Lukáš.v89 » 06 úno 2024 00:50 » v Mobily, tablety a jiná přenosná zařízení
    8
    916
    od Smile Zobrazit poslední příspěvek
    07 úno 2024 07:40

Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 4 hosti