Vinnaren i pepparkakshustävlingen!
2011-01-02, 17:10
  #1
Medlem
Jag har en tabell där jag har lagt upp massa produkter och en där bilder till produkter laddas upp.
Problemet är att på startsidan så vill jag visa senaste produkter och när jag har flera bilder som är kopplad till en produkt så visas produkten upp två gånger (om vi säger att den produkten har två bilder).

Hur ska jag skriva om jag bara vill att ett resultat ska skrivas ut/produkt?

Kod:
mysql_query("SELECT * FROM products JOIN product_pictures ON(products.id=product_pictures.prod_id) ORDER BY products.id DESC LIMIT 6"); 
Citera
2011-01-02, 17:21
  #2
Medlem
Jag löste problemet.

Hämtade bara ut informationen för produkten sedan i loopen så gjorde jag en till query som fick limit 1.

Har någon en bättre lösning så är ni välkomna!
Citera
2011-01-03, 08:42
  #3
Medlem
Citat:
Ursprungligen postat av maik-
Jag löste problemet.

Hämtade bara ut informationen för produkten sedan i loopen så gjorde jag en till query som fick limit 1.

Har någon en bättre lösning så är ni välkomna!

Kod:
SELECT p.*, (select TOP 1 filename from product_pictures as pp WHERE pp.ProductID = p.ProductID) AS ProductPictureFilename FROM Products AS P
Citera
2011-01-03, 09:31
  #4
Medlem
z0mfg(ish)s avatar
SELECT DISTINCT borde väl göra jobbet också?

Lite googlande säger att SELECT TOP inte fungerar i MySQL:
http://dev.mysql.com/doc/refman/5.0/en/select.html

Där finns inget om SELECT TOP.
Dock en kommentar:
Citat:
The LIMIT clause can be used when you would use TOP in Access or MS SQL.
__________________
Senast redigerad av z0mfg(ish) 2011-01-03 kl. 09:36.
Citera
2011-01-03, 10:03
  #5
Medlem
Citat:
Ursprungligen postat av z0mfg(ish)
SELECT DISTINCT borde väl göra jobbet också?

Lite googlande säger att SELECT TOP inte fungerar i MySQL:
http://dev.mysql.com/doc/refman/5.0/en/select.html

Där finns inget om SELECT TOP.
Dock en kommentar:

Provade med DSTINCT vilket jag använt för det var det första jag tänkte på, men fungerade ej ( )

Annars har jag ju en lösning på problemet som fungerar, men tror ej det är optimalt.
Citera
2011-01-03, 11:52
  #6
Medlem
Citat:
Ursprungligen postat av maik-
Jag har en tabell där jag har lagt upp massa produkter och en där bilder till produkter laddas upp.
Problemet är att på startsidan så vill jag visa senaste produkter och när jag har flera bilder som är kopplad till en produkt så visas produkten upp två gånger (om vi säger att den produkten har två bilder).

Hur ska jag skriva om jag bara vill att ett resultat ska skrivas ut/produkt?

Kod:
mysql_query("SELECT * FROM products JOIN product_pictures ON(products.id=product_pictures.prod_id) ORDER BY products.id DESC LIMIT 6"); 

Kod:
SELECT P.*, PP.*
FROM products P
JOIN product_pictures PP ON PP.prod_id = P.id
LEFT JOIN product_pictures PPP ON PPP.prod_id = P.id AND PPP.id < PP.id
WHERE PPP.id IS NULL
ORDER BY P.id
Citera
2011-01-03, 12:06
  #7
Medlem
Citat:
Ursprungligen postat av SirPatman
Kod:
SELECT P.*, PP.*
FROM products P
JOIN product_pictures PP ON PP.prod_id = P.id
LEFT JOIN product_pictures PPP ON PPP.prod_id = P.id AND PPP.id < PP.id
WHERE PPP.id IS NULL
ORDER BY P.id

Ska testa detta när jag kommer hem, kan nog vara en lösning.
Citera
2011-01-04, 00:30
  #8
Medlem
Citat:
Ursprungligen postat av z0mfg(ish)
SELECT DISTINCT borde väl göra jobbet också?

Lite googlande säger att SELECT TOP inte fungerar i MySQL:
http://dev.mysql.com/doc/refman/5.0/en/select.html

Där finns inget om SELECT TOP.

Bara att byta ut TOP 1 mot LIMIT 1 i så fall. En subquery torde vara det mest optimala, jämfört med det andra förslaget att göra en self-join.
Citera
2011-01-09, 12:30
  #9
Medlem
christerys avatar
Var ett tag sen jag pillade med SQL men finns det inte en UNIQUE eller nåt. Pillar lite med RDO i VMS så det kanske är där jag sett det. Men jag ides inte googla på det.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback