Hoi iedereen,
Ik heb een database met dag acties, nu worden die automatisch dagelijks gecheckt via een cronjob. Nu kan het soms zijn dat een dagactie 2x in de database gezet wordt met hetzelfde kortingscode. Hierbij wordt wel een andere unieke hash meegegeven dus ligt aan de feed.
Nu wil ik alle verlopen dag acties uit de database halen:
Dit wordt en krijg netjes de laatste 25 dag acties op mijn scherm, maar bij sommige zie ik dubbele dagacties. Nu kan dit met MySQL Distinct opgelost worden maar het blijft maar niet lukken:PHP Code:
$check_kortings =
mysql_query("SELECT
`dagaanbieding`.`id`,
`dagaanbieding`.`actief`,
`dagaanbieding`.`title`,
`dagaanbieding`.`description`,
`dagaanbieding`.`offer_id`,
`dagaanbieding`.`price`,
`dagaanbieding`.`price_old`,
`dagaanbieding`.`publisher`,
`dagaanbieding`.`datum`,
`winkels`.`winkel_naam`
FROM `dagaanbieding`
LEFT JOIN `winkels` ON (`winkels`.`winkel_naam` = `dagaanbieding`.`publisher`)
".$check_soort_inactief."
ORDER BY `dagaanbieding`.`id` DESC LIMIT ".$limit1."
");
Nu moet er als er een dubbele rij is de rij gepakt worden met de meest recente time (veld datum in de database).PHP Code:
$check_kortings =
mysql_query("SELECT DISTINCT ...
Enig idee hoe ik dit het beste kan doen?
- MySQL Distinct
-
04-04-2011, 09:58 #1
- Berichten
- 1.245
- Lid sinds
- 18 Jaar
MySQL Distinct
-
-
05-04-2011, 09:59 #2
- Berichten
- 75
- Lid sinds
- 15 Jaar
Re: MySQL Distinct
DISTINCT zorgt dat je maar 1 record terug krijgt, als er 2 of meer identieke records zijn.
Je kan daarbij dus geen voorwaarden opgeven.
Jij wilt hier de voorwaarde hebben dat je wel maar 1 record terugkrijgt, maar wel met de voorwaarde dat het de meest recente is.
Dan moet je group by gebruiken, met een MAX over het datum veld.
Iets als:
Select id,max(datum)
From dagaanbieding...
..
Group by (ID)
-
05-04-2011, 10:58 #3
- Berichten
- 74
- Lid sinds
- 14 Jaar
Re: MySQL Distinct
Mark, gaat niet werken MAX haalt inderdaad het laatste record op.
Maar doet dit altijd en niet alleen als er 2 of meerdere identieke records.
Dit kun je beter combineren met COUNT(*) as AANTAL en een HAVING AANTAL > 1
-
06-04-2011, 11:48 #4
- Berichten
- 1.245
- Lid sinds
- 18 Jaar
Re: MySQL Distinct
Thanx ga ik het mee proberen!
-
08-04-2011, 16:21 #5
- Berichten
- 1.483
- Lid sinds
- 16 Jaar
Re: MySQL Distinct
Verlopen al je acties standaard na een bepaalde tijd? Reken dan gewoon even met je datums in MySQL zodat je vreemde acties in je code voorkomt;
DELETE FROM `tablename`
WHERE `datetime_field`> NOW() + INTERVAL 48 HOUR
Bij het toevoegen van een nieuw record zorg je ervoor dat je NOW() meegeeft in je datetime veld;
INSERT INTO `tablename` (`datetime_field`) VALUES (NOW())
Wanneer je vooraf wilt bepalen wanneer een bepaalde actie gaat verlopen dan kun je het volgende uitvoeren;
INSERT INTO `tablename` (`expired_field`) VALUES (NOW() + INTERVAL 60 HOUR)
En verwijder je verlopen acties zo;
DELETE FROM `tablename` WHERE `expired_field` < NOW()
Weergeeft alleen lopende acties (voorkomt een heel gepuzzel met het verwijderen, laat de rijen lekker staan);
SELECT * FROM `tablename` WHERE `expired_field` > NOW()
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic