/ Forside/ Teknologi / Udvikling / SQL / Spørgsmål
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
MySQL og JOINS
Fra : kafkakim
Vist : 375 gange
100 point
Dato : 07-10-05 23:01

Hej jeg har et problem med at få det rigtige ud af en MySQL database med 2 tabler

tabel 1 "tbl_products"
sysid, name, price
1, "Stol", 220.00
2, "Seng", 300.00
3, "Bord", 400.00

tabel 2 "tbl_store"
sysid, instore, date, productid
1, 200, 2005-10-06, 2
2, 189, 2005-10-07, 2
3, 178, 2005-10-08, 2
4, 234, 2005-10-06, 3

Hvis jeg spørger med følgende:
SELECT tbl_product.name, tbl_store.instore, tbl_store.date FROM tbl_products
LEFT JOIN tbl_store ON
tbl_product.sysid = tbl_store.productid

Får jeg:
"Stol", Null, Null
"Seng", 200, 2005-10-06
"Seng", 189, 2005-10-07
"Seng", 178, 2005-10-08
"Bord", 234, 2005-10-06

Men jeg vil gerne have kun at hvis der er en vare på lager, at det er den yndste er kommer ud som her
"Stol", Null, Null
"Seng", 178, 2005-10-08
"Bord", 234, 2005-10-06

Hvordan gør jeg dette?

Jeg har prøvet at indsætte
ORDER BY tbl_store.date DESC LIMIT 1
med en join
men dette er ikke lykkes at

 
 
Kommentar
Fra : buch78


Dato : 07-10-05 23:19

dette her bude virke

SELECT tbl_product.name, tbl_store.instore, tbl_store.date FROM tbl_products
LEFT JOIN tbl_store ON
tbl_product.sysid = tbl_store.productid
ORDER BY tbl_store.date DESC LIMIT 1;

Kommentar
Fra : kafkakim


Dato : 08-10-05 11:07

Tak buch78
Jeg har prøvet med det.
Men jeg får kun følgende linier ud
"Seng", 178, 2005-10-08
"Bord", 234, 2005-10-06

Jeg mangler "stol",
"Stol", Null, Null

Kan dette lade sig gøre?


Kommentar
Fra : buch78


Dato : 08-10-05 18:51

problemet er at stol ikke har en dato værdi, men der burde kunne lade sig gøre.. lad os håbe at der ligge kommer en forbi som har er lidt mere inde i mysql end jeg.. og i mellem tiden vil jeg lige se hvad jeg kan finde ud af

Kommentar
Fra : rpje


Dato : 10-10-05 10:46

Prøv denne

SELECT A.name, B.instore, (Select max(date) from tbl_store where productid=A.Sysid) as Date
FROM tbl_products as A LEFT JOIN tbl_store as B ON
A.sysid = B.productid
Where (B.SysId = (Select max(SysId) from tbl_store where productid=A.Sysid) or (Select max(SysId) from tbl_store where productid=A.Sysid) is null)

MV.
Peter Jensen

Kommentar
Fra : kafkakim


Dato : 10-10-05 22:38

Hej Peter
Tak for dit indlæg.
Jeg får dog fejlen:
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT max( date)
FROM tbl_store
WHERE productid = A.s

Er det SQL serveren som er gal, jeg har ikke kunne inserted Select statements som denne?
Jeg har været inde på MySQL og checke men selv deres fejler.

Håber du kender mere til dette.

På forhånd tak


Kommentar
Fra : rpje


Dato : 12-10-05 12:13

Da jeg testede det oprettede jeg simpelthen de tabeller du har beskrevet med samme indhold. Jeg benytter dog mssql. Den kunde til gengæld ikke tåle et felt med navnet ”date” så jeg omdøbte den til dato... hvis det er muligt da prøv det. Du benytter også et name som feltnavn det kan også være lidt uheldigt..

PS.. undskyld forsinkelsen jeg er ved at flytte

MV.
Peter Jensen


Kommentar
Fra : kafkakim


Dato : 12-10-05 17:32

Tak Peter
Jeg har også prøvet det på MSSQL, og her kan syntaksen godt lade sig gøre.
Men jeg kan ikke få det til at virke under mySQL. Også når jeg følger mySQL hjemmeside.
Med simple kommandor efter bogen.

Jeg tror min løsning efter alt dette må blive en join og fjerne derefter de overflødige rows jeg får ud med lidt kode efterfølgende.


Du skal have tak for hjælpen p.t. også tak til buch78

Kafkakim



Du har følgende muligheder
Dette spørgsmål er blevet annulleret, det er derfor ikke muligt for at tilføje flere kommentarer.
Søg
Reklame
Statistik
Spørgsmål : 177409
Tips : 31962
Nyheder : 719565
Indlæg : 6407779
Brugere : 218874

Månedens bedste
Årets bedste
Sidste års bedste