#1 2015-05-31 18:22:04

sagto
Člen
Registrován: 2010-05-13
Příspěvky: 80

Dotaz na MySQL pro 2 tabulky

Dobrý den,

chtěl jsem se zeptat na dotaz na mysql s 2-mi tabulkami.

Jedna tabulka bude mít klienty a druhá smlouvy. Nejlépe bych potreboval jeden vystup, kde budu mit klienty a smlouvy. Jestli by slo aby jsem pak pres jeden for vypsal jak klienty tak smlouvy tak, aby byl vystup takto :

Klient 1
smlouva 1
smlouva 2
Klient 2
smlouva 3
smlouva 4
smlouva 5

atd...

nebo si nacist klienty a pres fory pak nacitat smlouvy. Potreboval bych to pro mensi zatez na server. Hlavne aby to bylo co nejrychleji zobrazeno kdyby tam byli stovky klientu a kazdy klient prumerne tak 7 smluv.

Dekuji za odpoved.

Offline

#2 2015-05-31 19:39:16

kksmirice
Endora rádce
Místo: Vrchovnice
Registrován: 2011-11-20
Příspěvky: 6,023
Web

Re: Dotaz na MySQL pro 2 tabulky

Nevím jaká je struktura tabulek, tak pokud jsou tabulky provázány (např. id klient) je jednodušší provést jeden dotaz, než stovky dotazů (podle počtu klientů).
http://www.w3schools.com/sql/sql_join_left.asp
http://www.itnetwork.cz/mysql-tutorial- … ce-tabulek
https://www.interval.cz/clanky/sql-spoj … a-pohledu/


1. Murphyho zákon:
Na počátku nebylo nic. I to se pokazilo!

stránky: CMS test
kontakt - instalace systémů, MySQL, FTP přístup, ...
Instalační balíky vybraných CSM

Problémy spojené s provozem služeb Endora, řešte na tomto fóru.

Offline

#3 2015-05-31 20:05:59

sagto
Člen
Registrován: 2010-05-13
Příspěvky: 80

Re: Dotaz na MySQL pro 2 tabulky

Jsou spojeny ID. Smlouvy mají ID klienta. Klient je Hlavní tabulka. Smlouvy jakoby dodatková. Celý systém byl navrhnutý, že se načte klient a s ním pak smlouvy. Ale teď chce export klientů a s nimi i smlouvy a to tak, jak jsem to napsal. Jen nevím Jak spojit dotaz tak, abych během jednoho či dvou vnořených foru měl vypsat klienty a smlouvy ve správném pořadí a to ještě tak, abych řadil smlouvy k uživatelům. Hlavně aby mi to neustále nevypisovalo
klient 1
smlouva 1
klient 1
smlouva 2
klient 1
smlouva 3
klient 2
smlouva 4

Aby to byl klient jeho smlouvy. Klient 2 a jeho smlouvy. Tyhle dotazy jsem nepotřeboval a tím nevím co a jak. Jsem kodér, ale ne databázový.

Pokud pošlete jednoduchý příklad, tak i z toho se poučím a přizpůsobím kód podle toho. Jen nechci řešit stovky dotazů a stovky foru. Už to se mi zdá hloupé.

Děkuji za odpověď.

Offline

#4 2015-05-31 20:26:06

kksmirice
Endora rádce
Místo: Vrchovnice
Registrován: 2011-11-20
Příspěvky: 6,023
Web

Re: Dotaz na MySQL pro 2 tabulky

V uvedených odkazech jsou i příklady, stačí si vybrat...

EDIT:
nebo zde uveďte Váš "nefunkční" dotaz.


1. Murphyho zákon:
Na počátku nebylo nic. I to se pokazilo!

stránky: CMS test
kontakt - instalace systémů, MySQL, FTP přístup, ...
Instalační balíky vybraných CSM

Problémy spojené s provozem služeb Endora, řešte na tomto fóru.

Offline

#5 2015-06-01 11:53:12

Lkopo
Podpora
Registrován: 2010-02-12
Příspěvky: 1,916
Web

Re: Dotaz na MySQL pro 2 tabulky

SELECT `klienti`.*, `smlouvy`.* FROM `klienti` LEFT JOIN `smlouvy` ON `klienti`.`id` = `smlouvy`.`klient_id` GROUP BY `klienti`.`id`

Nazvy si upravte podla potreby.

Hadam to pojde, uz dlhsie som nepouzil joiny big_smile


Portfólio
E-mail: eduard(at)karpiel.sk

Offline

#6 2015-06-01 14:21:41

sagto
Člen
Registrován: 2010-05-13
Příspěvky: 80

Re: Dotaz na MySQL pro 2 tabulky

no... tak jsem zjistil, ze mi to vypisuje takto

crexwergv oiuiguf
Základní údaje
Pohlaví : Muž
Datum narození : Není zadáno
Smlouva : 1430295061

crexwergv oiuiguf
Základní údaje
Pohlaví : Muž
Datum narození : Není zadáno
Smlouva : 1430295079

a ja to potrebuji takto

crexwergv oiuiguf
Základní údaje
Pohlaví : Muž
Datum narození : Není zadáno
Smlouva : 1430295061
Smlouva : 1430295079

jde to nejak osefovat pres mysql nebo to musim osefovat pres fory a dotazy ve forech?

Dekuji za odpoved.

Offline

#7 2015-06-01 18:41:20

Destroyer
Endora rádce
Registrován: 2009-11-01
Příspěvky: 2,097
Web

Re: Dotaz na MySQL pro 2 tabulky

to nejde, to uz musite upravit v php, pripadne alternativne to muzete teoreticky udelat jako jednu transakci(v innodb), nebo pokud "to staci", tak proste jen dva jednoduchy sql dotazy - to je samozrejme ale jen pro 1 klienta

select * from klienti where klient_id = cislo;
select * from smlouvy where klient_id = cislo;

(misto hvezdicky staci rict pole, ktere jsou potreba)

rozdeleni do dvou dotazu ale muze byt problematicke (pokud nejsou jako jedna transakce), proto je v tomhle případě lepší řešení od @Lkopo, nemluve o tom pokud zaznamy chcete zobrazit vsechny(nebo vic jak pár), tak je xx dotazu na databazi taky spatne

Offline

#8 2015-06-01 19:12:00

kksmirice
Endora rádce
Místo: Vrchovnice
Registrován: 2011-11-20
Příspěvky: 6,023
Web

Re: Dotaz na MySQL pro 2 tabulky

To co to vypisuje je v pořádku. Stačí to jen upravit v php pro výpis podle představ.
Smyčku for-next bych raději nepoužíval - musíte navíc zjistit počet záznamů a stejně se neobejdete bez úpravy pro výpis klienta.
řešil bych např. takto:

... dotaz ...
$klient = 0;
while ($pole_vysledku = mysql_fetch_assoc($dotaz))
{
  if ($klient == $pole_vysledku['klient_id'])
  {
    echo ... vypsat co je potřeba, v případě stejného klienta ...
  } else {
    echo ... vypsat v případě dalšího klienta ...
    $klient = $pole_vysledku['klient_id'];
  }
...
echo ... vypis údajů ...
...
}

Jak už jsem již uváděl, vložte sem Váš kód a pak se můžeme o něčem smysluplném bavit, tak aby to fungovalo podle Vašich představ.
Uvedl jste, že jste kodér, kodér čeho?


1. Murphyho zákon:
Na počátku nebylo nic. I to se pokazilo!

stránky: CMS test
kontakt - instalace systémů, MySQL, FTP přístup, ...
Instalační balíky vybraných CSM

Problémy spojené s provozem služeb Endora, řešte na tomto fóru.

Offline

Zápatí

Založeno na FluxBB | CZ a SK