» »

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?
^.^

Ericssony ::

Združiš jadralce z GROUP BY

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

t3hn0 ::

Res je, hvala!
^.^

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
Lep pozdrav,

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

HardFu ::

dvomim, many to many relacijo bi moral preko join tabele delat pa bi slo.
http://codeable.io

izolan ::

Pl/sql =)

fx ::

našel rešitev :

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

Zgodovina sprememb…

  • spremenil: fx ()

technolog ::

Ne bo ti ratalo na ta način.

HardFu ::

ce ti bo ratalo spremenit "|" v "," potem rajsi uporabi find_in_set()
http://codeable.io

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

Zgodovina sprememb…

  • spremenil: fx ()

fx ::

Sestavil sem naslednji select v mysql
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

keworkian ::

Kaj pa če bi uporabil še group by?
Obscenities in B-Flat

fx ::

keworkian je izjavil:

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 ::

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,
Lep pozdrav,

fx

slosi ::

poglej še za:

max_allowed_packet

v my.ini


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Učenje programiranja PHP

Oddelek: Programiranje
91351 (892) Spura
»

[SQL] Unikatni izpisi

Oddelek: Programiranje
212014 (1401) 111111111111
»

SQL poizvedba

Oddelek: Programiranje
163017 (2362) awy
»

[SQL] - združitev glede na iste vrednosti

Oddelek: Programiranje
131247 (889) tx-z
»

SQL select problemček

Oddelek: Programiranje
7995 (865) darh

Več podobnih tem