Group By of Join

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jasper DS

Jasper DS

05/04/2013 13:40:03
Quote Anchor link
Hallo,

ik zit met twee tabellen. "Articles" en "pricetable".
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
CREATE TABLE IF NOT EXISTS `articles` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `description` text COLLATE utf8_unicode_ci NOT NULL,
  `categorie` int(2) NOT NULL,
  `picture` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
  KEY `categorie` (`categorie`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=10 ;


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
CREATE TABLE IF NOT EXISTS `pricetable` (
  `id` int(2) NOT NULL AUTO_INCREMENT,
  `ArticleId` int(2) NOT NULL,
  `Date` date NOT NULL,
  `price` double(10,2) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `ArticleId` (`ArticleId`),
  KEY `ArticleId_2` (`ArticleId`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=10 ;


Nu wil ik alle articles ophalen behalve diegene met hetzelfde articleId daar wil ik alleen de laatste van ophalen want dat is de laatste prijs.
Ik heb al geprobeert met group by maar dat was toch niet de geweldigste oplossing dus ik denkt dat ik misschien een andere join-type moet gebruiken?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
SELECT p.id,a.name,a.description,a.picture,p.price
FROM pricetable AS p
INNER JOIN articles as a on p.articleId = a.id
WHERE categorie = :categorie
GROUP BY a.id
Order BY p.articleId DESC


Kan een SQL-goeroe mij even helpen? :-)

Bedankt!
Gewijzigd op 05/04/2013 16:11:48 door Jasper DS
 
PHP hulp

PHP hulp

29/09/2020 02:44:28
 
Erwin H

Erwin H

05/04/2013 14:57:44
Quote Anchor link
Vraag 1:
Zou je alsjeblieft die query wat beter op kunnen schrijven. Zo op 1 regel is het gewoon niet te lezen. Je schrijft een heel php script toch ook niet op 1 regel?

Dan een inhoudelijke vraag. Wat is de relatie tussen de gegevens in de twee tabellen? Wat staat in de 'articles' tabel en wat staat er in de 'pricetable'. Je zegt namelijk dat je alle articles wilt ophalen, behalve die met hetzelfde id. Maar daar denk ik dat je het verkeerd zet, want ik neem aan dat je niet twee articles hebt met hetzelfde id, dan gaat het om de prijzen, of niet?
 
Jasper DS

Jasper DS

05/04/2013 16:13:50
Quote Anchor link
Sorry Erwin, die query wordt gegenereerd door mijn PHP script normaal schrijf ik het idd deftig. Heb er wat enters tussen gezet.

De reden waarom ik twee tabellen heb is omdat de prijs kan veranderen en ik een "history" wil. Als iemand product x koopt aan €250 dan staat er op zijn factuur het id van de priceTable waar de prijs €250 is en het articleID het id van product x is.
 
Ward van der Put
Moderator

Ward van der Put

05/04/2013 16:26:43
Quote Anchor link
Je kunt voor sluitende administratie beter de geldende en "formeel overeengekomen" prijs opslaan bij de orderregels.

Je hebt nu één prijsmodel: een prijs per product die kan veranderen in de tijd. Maar er zijn véél meer prijsmodellen mogelijk. Dat kan zelfs tot het niveau van een individuele prijs per klant of type klant.
Gewijzigd op 05/04/2013 16:29:15 door Ward van der Put
 
Jasper DS

Jasper DS

05/04/2013 16:54:23
Quote Anchor link
Hmm ja langs de éne kant kan ik me er in vinden maar langs de andere kant vind ik het zo vreemd... :s
 
Erwin H

Erwin H

05/04/2013 16:55:48
Quote Anchor link
Volgens mij zou je het dan zo moeten doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT p.id, a.name, a.description, a.picture, p.price
FROM articles a
INNER JOIN (
  SELECT articleid, MAX(date) AS last_date
  FROM pricetable
  GROUP BY articleid
) m ON a.articleid = m.articleid
INNER JOIN pricetable p ON (
  p.articleid = m.articleid
  AND p.date = m.last_date
)
WHERE a.categorie = :categorie
ORDER BY a.articleid;



Toevoeging op 05/04/2013 16:56:50:

De opmerking van Ward zou je vraag en query overigens niet veranderen als je de laatste prijs wilt weten. Misschien zou je het alleen uit een andere tabel halen.
 
Ward van der Put
Moderator

Ward van der Put

05/04/2013 17:11:46
Quote Anchor link
Erwin, toch wel, want het gaat er ook om wat nu eigenlijk een "prijs" is in het grotere geheel. Dan blijkt het bedrag dat op de factuur staat, de enige prijs die vastligt; de rest is namelijk binnen zekere grenzen variabel.

Als één product altijd één vaste prijs heeft, mis je de flexibiliteit die een online marketeer nodig heeft. Kijk bijvoorbeeld eens naar de "price rules" van Magento. Die zijn niet altijd even duidelijk, maar je kunt er van alles mee. Tweede voor de helft, 2 + 1 gratis, bij aankoop van 12 flessen een kurkentrekker cadeau, noem maar op.

Volgens sommige schattingen wordt ongeveer de helft van de online aankopen al gestuurd door een of andere vorm van individuele prijsstelling op gebruikersniveau. Wie met een supersnelle internetverbinding op een luxe MacBook Pro een vliegticket boekt, betaalt meer...
 
Erwin H

Erwin H

05/04/2013 17:17:25
Quote Anchor link
Je zal ongetwijfeld helemaal gelijk hebben Ward, maar ik zie niets van die redenen in de vraag terug van Jasper. Als hij de laatste prijs wil hebben (om welke reden dan ook), dan is de query die ik gegeven heb nog steeds bruikbaar, ook als je de prijzen niet in een prijzen tabel hebt staan, maar in een order tabel.
WAAROM hij die laatste prijs wil hebben is een andere vraag, maar ik geloof niet dat dat ter discussie stond in dit topic (wat niet wil zeggen dat het geen interessant onderwerp is overigens).
 
Ward van der Put
Moderator

Ward van der Put

05/04/2013 17:26:09
Quote Anchor link
Erwin, daar heb je op zich een punt, alleen staat de topic niet op zich :) We hadden het gisteren namelijk ook al over het 'uitdenken' van een webwinkel. Hoe een prijs precies tot stand komt, is daarin bedrijfseconomisch én technisch dus wel relevant.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

05/04/2013 19:28:33
Quote Anchor link
Wat relevant is, is hoe je het in de database gaat bewerken c.q. opslaan.
En mijn principe is dan altijd: sla de prijs van een product op wanneer het verkocht wordt.
Met andere woorden in de order_products tabel
 
Jasper DS

Jasper DS

08/04/2013 01:17:39
Quote Anchor link
Erwin, bedankt je query werkt feilloos. Alleen jammer dat mijn query-builder er niet mee overweg kan. Dan maar als pure sql ingeven.

@Ward, de website die ik maak is bij wijze van oefening. Of het volledig economisch correct is zal ik over nadenken moest ik ooit een echte webshop maken. Toch bedankt!
 
Ozzie PHP

Ozzie PHP

08/04/2013 01:44:51
Quote Anchor link
Ward van der Put op 05/04/2013 17:11:46:
Volgens sommige schattingen wordt ongeveer de helft van de online aankopen al gestuurd door een of andere vorm van individuele prijsstelling op gebruikersniveau. Wie met een supersnelle internetverbinding op een luxe MacBook Pro een vliegticket boekt, betaalt meer...

Heb je hier ook aantoonbare bewijzen van? Het lijkt mij sterk dat persoon A en persoon B een verschilende prijs betalen voor een vliegticket, omdat persoon A achter een "simpele" PC met matige internetverbinding de ticket boekt, terwijl persoon B gebruikmaakt van een high-tech laptop met een supersnelle verbinding. Ik kan me sowieso niet voorstellen dat dit in Nederland gebeurt. Ik denk dat dat bij wet verboden is.
 
Ward van der Put
Moderator

Ward van der Put

08/04/2013 07:51:04
Quote Anchor link
Meer dan twaalf jaar geleden ontstond al eens ophef over deze vorm van individuele prijsdiscriminatie. CNN.com: “In September 2000, Amazon.com outraged some customers when its own price discrimination was revealed.” Het blijkt ook niet beperkt tot internet, want eerder ontstond al eens ophef over een gedrukte catalogus: “[...] in 1996, consumers sued based on allegations that Victoria’s Secret distributed different versions of its catalog that offered different prices to different customer groups for the same items.”

Waar Amazon prijzen per individu aanpast, doet bijvoorbeeld Dell dat ruimer op het niveau van doelgroepen: “One day recently, the Dell Latitude L400 ultralight laptop was listed at $2,307 on the company's Web page catering to small businesses. On the Web page for sales to health-care companies, the same machine was listed at $2,228, or 3% less. For state and local governments, it was priced at $2,072.04, or 10% less than the price for small businesses.”

Hoewel het dus oud nieuws is, ontstond er in juni 2012 opnieuw ophef over deze techniek door een artikel in The Economist. Hierin vind je ook het concrete advies: “Surf on a PC, not an Apple.”
 
Ozzie PHP

Ozzie PHP

08/04/2013 10:10:25
Quote Anchor link
Jee, dat is wel een slechte manier van zakendoen hoor! Als mij dat 1 keer overkomt bij welk bedrijf dan ook, dan zal ik nooit meer met dat bedrijf in zee gaan. Ik neem aan / mag hopen dat zoiets in Nederland verboden is?
 
Ward van der Put
Moderator

Ward van der Put

08/04/2013 10:34:30
Quote Anchor link
"Prijzen kunnen gewijzigd worden." Ik heb wel eens last-minute geboekt voor honderd euro. Zit je in het vliegtuig naast een echtpaar dat meer dan duizend euro heeft betaald voor dezelfde ticket. Die waren daarvan ook niet bepaald gecharmeerd.

Je mag met iedereen een individuele koopovereenkomst sluiten. En de overeengekomen prijs is daarvan slechts een onderdeel, dus ik denk dat deze vormen van "individual pricing" niet per se verboden zijn. Op een grote aanschaf (van wasmachine tot auto) probeer ik altijd af te dingen. En bij de koop van een huis betaalt bijna niemand in Nederland de vraagprijs. Een individuele prijs bedingen is dus niet ongebruikelijk.
 
Ozzie PHP

Ozzie PHP

08/04/2013 11:02:32
Quote Anchor link
Tja, daar zit wel iets in inderdaad. Ik ding ook wel eens af en dan krijg ik ook meer korting dan een ander. Maar de vraag is... mag je in 1e instantie al een andere prijs aanbieden aan een andere doelgroep?

Dus, stel een doorsnee man loopt een electronica winkel binnen... er gebeurt niks. De man loopt de winkel uit. Vervolgens stopt er een statige man met een dikke Jaguar voor de deur. Snel wordt razendsnel ieder prijskaartje van ieder product omgedraaid door het personeel zodat er een hogere prijs op staat. Zou dat mogen?

Het voelt als Nederlanders die in het buitenland op straat worden aangesproken door een louche verkoper... "sir, special price for you!!"
 
Ward van der Put
Moderator

Ward van der Put

08/04/2013 15:56:10
Quote Anchor link
Actueler voorbeeld: “Duitsers kunnen minimaal acht euro goedkoper naar de Efteling dan Nederlanders.”

http://www.spitsnieuws.nl/archives/binnenland/2013/04/efteling-geeft-duitsers-korting
 
Ozzie PHP

Ozzie PHP

08/04/2013 16:00:16
Quote Anchor link
Goede Ward! Hoe actueel wil je het hebben inderdaad. Wel frapant. Buitenlanders worden gelokt met goedkopere prijzen, maar de naïeve Nederlanders betalen de volle mep. Ik zie dit echt als een "lokkertje". De Efteling zal in Duitsland niet dezelde bekendheid genieten als in Nederland... en daarom durven ze niet van die schandalig hoge prijzen te vragen.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.