Forum » Izdelava spletišč » MySQL pomoc
MySQL pomoc
t3hn0 ::
Imam nalogo pri kateri moram izpisati razlicno stevilo barv na podlagi rezervacij za vsakega jadralca.
imamo 3 tabele s polji:
- jadralec
jid
- rezervacija
jid
cid
dan
- coln
cid
barva
prisel sem do tega:
SELECT DISTINCT j.jid, c.barva as StBarv
FROM coln c, rezervacija r, jadralec j
WHERE (j.jid = r.jid AND c.cid = r.cid)
ORDER BY StBarv DESC
kar mi izpise vse jadralce in barve colnov. Samo bi rad oz. naloga zahteva da izpisem stevilo barv in če prvi stavek spremenim v
SELECT DISTINCT j.jid, COUNT(c.barva) as StBarv
mi izpise le prvega jadralca in sestevek vseh skupaj, torej npr. id 22 in 11 barv (11 je sestevek vseh barv od vseh jadralcev)
Kako dosezem da izpise stevilo barv za vsakega posebaj?
imamo 3 tabele s polji:
- jadralec
jid
- rezervacija
jid
cid
dan
- coln
cid
barva
prisel sem do tega:
SELECT DISTINCT j.jid, c.barva as StBarv
FROM coln c, rezervacija r, jadralec j
WHERE (j.jid = r.jid AND c.cid = r.cid)
ORDER BY StBarv DESC
kar mi izpise vse jadralce in barve colnov. Samo bi rad oz. naloga zahteva da izpisem stevilo barv in če prvi stavek spremenim v
SELECT DISTINCT j.jid, COUNT(c.barva) as StBarv
mi izpise le prvega jadralca in sestevek vseh skupaj, torej npr. id 22 in 11 barv (11 je sestevek vseh barv od vseh jadralcev)
Kako dosezem da izpise stevilo barv za vsakega posebaj?
^.^
ta-mau ::
tko kot je reku Ericssony:
SELECT j.jid, COUNT(DISTINCT(c.barva)) as StBarv
FROM coln c, rezervacija r, jadralec j
WHERE (j.jid = r.jid AND c.cid = r.cid)
GROUP BY j.jid
SELECT j.jid, COUNT(DISTINCT(c.barva)) as StBarv
FROM coln c, rezervacija r, jadralec j
WHERE (j.jid = r.jid AND c.cid = r.cid)
GROUP BY j.jid
fx ::
Mene pa zanima če je to možno izvesti z MySQL ali potrebujem še vmes PHP.
Problem je sledeči :
tbl_1 :
id | name | ids
---+------+------
15 | test | "3|5|7"
---+------+-------
20 | test | "3|5|7|13"
---+------+-------
tbl_2 :
id | name |
---+------+
3 | Luks
---+------+
5 | Pika
---+------+
7 | Jumpi
---+------+
13 | Miki
---+------+
Sedaj pa me zanima kako naredim da mi MySQL prikaže vsa imena iz tbl_2 glede na tbl_1.ids.
A je to možno izvesti direktno z MySQL ali je potrebno vmes PHP, ki sparsa string in sestavi MySQL stavek.
Hvala.
Lp,
fx
Problem je sledeči :
tbl_1 :
id | name | ids
---+------+------
15 | test | "3|5|7"
---+------+-------
20 | test | "3|5|7|13"
---+------+-------
tbl_2 :
id | name |
---+------+
3 | Luks
---+------+
5 | Pika
---+------+
7 | Jumpi
---+------+
13 | Miki
---+------+
Sedaj pa me zanima kako naredim da mi MySQL prikaže vsa imena iz tbl_2 glede na tbl_1.ids.
A je to možno izvesti direktno z MySQL ali je potrebno vmes PHP, ki sparsa string in sestavi MySQL stavek.
Hvala.
Lp,
fx
Lep pozdrav,
fx
fx
HardFu ::
protip: primary keyi naj majo vedno ime 'id', ker je zmeraj unikaten in ne rabi met predpone. ce imas relacijsko polje pa naj ima ime relacijskega modela plus '_id', torej coln_id. Tako bodo tudi developerji za teboj hitro vedeli za kaj se gre, ali pa bos sam na dolgi rok lazje debugal. Kripticna imena spremenljivk in polj v bazah ponavadi precej podaljsajo debugging time, cetudi sam za sabo popravljas enkrat v prihodnosti.
http://codeable.io
fx ::
Moja napaka da sem vizualno bolj površno prikazal obliki table:
tab_1: +----+------------+ | id | tbl_2_id | +----+------------+ | 15 | "3|5|7" | +----+------------+ | 20 | "3|5|7|13" | +----+------------+ tbl_2: +----+-------+ | id | name | +----+-------+ | 3 | Luks | +----+-------+ | 5 | Pika | +----+-------+ | 7 | Jumpi | +----+-------+ | 13 | Miki | +----+-------+
Lep pozdrav,
fx
fx
HardFu ::
dvomim, many to many relacijo bi moral preko join tabele delat pa bi slo.
http://codeable.io
fx ::
našel rešitev :
Hvala obema.
SELECT * FROM tbl_2 WHERE id IN (3,5,7). Tako da sedaj samo moram | spremeniti v , pa je :D
Hvala obema.
Lep pozdrav,
fx
fx
Zgodovina sprememb…
- spremenil: fx ()
fx ::
HardPhuck sem kar v php-ju napisal funkcijo, ki mi je po celotni tabeli šla skoz in spremenila iz "|" v "," in potem je šlo vse kot mora - Hvala vsem.
Lep pozdrav,
fx
fx
Zgodovina sprememb…
- spremenil: fx ()
fx ::
Sestavil sem naslednji select v mysql
Ampak kako naredim da mi prikaže samo zadnje vrednosti omenjenih kanalov (ch).
Ena izmed idej mi je bila ta da uporabim LIMIT 0,3 in mi prikaže zadnje tri podatke, kar je vse lepo in prav dokler so vsi kanali imeli že katero vrednost, če pa je niso imeli pa mi prikaže še predzadnjo vrednost kanala. Rezultat tega je da dobim vrednosti 20, 22 in 20 kanala.
Hvala vnaprej za odgovore.
SELECT * FROM `tbldata` WHERE sid=11 AND ch IN (20, 21, 22) ORDER BY FIELD(id, 20, 21, 22), id ASC
Ampak kako naredim da mi prikaže samo zadnje vrednosti omenjenih kanalov (ch).
Ena izmed idej mi je bila ta da uporabim LIMIT 0,3 in mi prikaže zadnje tri podatke, kar je vse lepo in prav dokler so vsi kanali imeli že katero vrednost, če pa je niso imeli pa mi prikaže še predzadnjo vrednost kanala. Rezultat tega je da dobim vrednosti 20, 22 in 20 kanala.
Hvala vnaprej za odgovore.
Lep pozdrav,
fx
fx
fx ::
Kaj pa če bi uporabil še group by?
Hvala ti za ta odgovor na to pa sem pozabil. Še 1x hvala.
Lep pozdrav,
fx
fx
fx ::
Zanima me zakaj mi MySQL server vrne napako MySQL Error #2006: MySQL server has gone away.
Čeprav v bazo vpisujem na intervalu od 1 do 18 sekunde - odvisno, kake so spremembe na elektroniki imam pa jih 15 (in jih bo še več) tako da razlika med prejšnjim in trenutnim podatkom je 18 sekund - ker po 18 sekundah elektronika vseeno pošlje podatke, tudi če ni bilo nobene spremembe.
V bazo pa vpisujem:
- trenutni čas (datetime)
- čas na elektronika (datetime)
- vrednost (double)
- sid (int) od 1 do 256
- pid (int) od 1 do 256
- ch (int) od 1 do 256
Sem že nastavil v my.ini pod
[mysqld]
wait_timeout=388800 // kar je 4,5 dni pa vseeno program začne vračat isto napako.
Ko pa ustavim in ponovno zaženem moj program pa zadeva spet deluje normalno.
Trenutno delam na tem da program uporabi mysql_ping() in preveri če je povezava ali ne, če je ni potem se ponovno poveže - ker mysql server deluje ves čas.
Hvala,
Čeprav v bazo vpisujem na intervalu od 1 do 18 sekunde - odvisno, kake so spremembe na elektroniki imam pa jih 15 (in jih bo še več) tako da razlika med prejšnjim in trenutnim podatkom je 18 sekund - ker po 18 sekundah elektronika vseeno pošlje podatke, tudi če ni bilo nobene spremembe.
V bazo pa vpisujem:
- trenutni čas (datetime)
- čas na elektronika (datetime)
- vrednost (double)
- sid (int) od 1 do 256
- pid (int) od 1 do 256
- ch (int) od 1 do 256
Sem že nastavil v my.ini pod
[mysqld]
wait_timeout=388800 // kar je 4,5 dni pa vseeno program začne vračat isto napako.
Ko pa ustavim in ponovno zaženem moj program pa zadeva spet deluje normalno.
Trenutno delam na tem da program uporabi mysql_ping() in preveri če je povezava ali ne, če je ni potem se ponovno poveže - ker mysql server deluje ves čas.
Hvala,
Lep pozdrav,
fx
fx
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | Učenje programiranja PHPOddelek: Programiranje | 1470 (1011) | Spura |
» | [SQL] Unikatni izpisiOddelek: Programiranje | 2205 (1592) | 111111111111 |
» | SQL poizvedbaOddelek: Programiranje | 3249 (2594) | awy |
» | [SQL] - združitev glede na iste vrednostiOddelek: Programiranje | 1384 (1026) | tx-z |
» | SQL select problemčekOddelek: Programiranje | 1070 (940) | darh |