complexe SQL query

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sander van Schalken

Sander van Schalken

20/10/2009 14:25:00
Quote Anchor link
Voor de administratie van een vereniging wil ik een uitdraai maken van mensen die (niet)betaald hebben.
Nu zijn er 2 velden, bedrag daar staat het bedrag in als het volledig betaald is. Als het nog niet volledig betaald is, dan staat er in de kolom 'saldo' het resterende bedrag.
Dus lidmaatschap is 50 euro. Als er 30 euro aanbetaald is, dan staat er in saldo 20 euro. Wanneer dit betaald is, dan is de datum in een ander veld ingevuld.

Nu ben ik bezig geweest om met een database query die leden te selecteren waar nog iets open staat, maar ik krijg het niet voor elkaar.

Ik heb alleen de totaal niet betaald leden dmv: bedrag NOT between 1 and 100 eruit geselecteerd.
dmv een OR heb ik het ook geprobeerd, maar dat werkt niet.
Het moet zoiets worden van. SELECT * FROM bedrag NOT between 1 AND 100 OR bedrag mag leeg zijn als saldo is gevuld en betaalddatum is leeg.

Kortom... wie weet raad?
 
PHP hulp

PHP hulp

08/09/2024 06:52:56
 
Eddy E

Eddy E

20/10/2009 14:35:00
Quote Anchor link
Geef even database dump met structuur en wat data (hoeft niet alles).
Dan kunnen we wat makkelijker kijken. Want het kan goed met 1 query.
 

20/10/2009 14:42:00
Quote Anchor link
Welke database staat het overigens in? MSSQL, pgSQL, MySQL? Wellicht handig om te vermelden omdat er toch wat verschil in zit.

Zou inderdaad handig zijn om de structuur van je tabel te plaatsen ;-)
 
Sander van Schalken

Sander van Schalken

26/10/2009 11:35:00
Quote Anchor link
Het gaat om MySQl met PHP.
Kan dit in 1 query dan. Het zou misschien moeten kunnen, maar hoe zou ik niet weten. Het zou fijn zijn als iemand me het goede pad in kan sturen.

CREATE TABLE `dbinschrijvingen` (
`id` smallint(5) unsigned NOT NULL auto_increment,
`naam` varchar(40) NOT NULL default '',
`voornaam` varchar(40) NOT NULL default '',
`geboortedatumdag` varchar(9) NOT NULL default '',
`geboortedatummaand` varchar(9) NOT NULL default '',
`geboortedatumjaar` smallint(4) NOT NULL default '0',
`adres` varchar(40) NOT NULL default '',
`postcode` varchar(7) NOT NULL default '',
`woonplaats` varchar(40) NOT NULL default '',
`telefoonnummer` varchar(11) NOT NULL default '',
`emailadres` varchar(40) NOT NULL default '',
`locatie` varchar(40) NOT NULL default '',
`tussenvoegsel` varchar(10) NOT NULL default '',
`bedrag` decimal(10,2) NOT NULL default '0.00',
`betaald1` date NOT NULL default '0000-00-00',
`bankkas1` varchar(10) NOT NULL default '',
`saldo` decimal(10,2) NOT NULL default '0.00',
`betaald2` date NOT NULL default '0000-00-00',
`bankkas2` varchar(10) NOT NULL default '',
`aanmaning1` date NOT NULL default '0000-00-00',
`aanmaning2` date NOT NULL default '0000-00-00',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=89 DEFAULT CHARSET=utf8 AUTO_INCREMENT=89 ;

en

CREATE TABLE `locatie` (
`id` smallint(5) unsigned NOT NULL auto_increment,
`plaats` text,
`aanmaning` varchar(5) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
 
TJVB tvb

TJVB tvb

26/10/2009 11:41:00
Quote Anchor link
Je zegt dat bedrag leeg mag zijn maar ik zie een NOT NULL staan
 
Sander van Schalken

Sander van Schalken

26/10/2009 12:20:00
Quote Anchor link
mmm... daar zeg je wat.... dat is simpel aan te passen.... maar dan blijft nog steeds over dat het met een query opgeroepen moet worden.
 
Eddy E

Eddy E

30/10/2009 18:49:00
Quote Anchor link
Heb je ook wat voorbeeld data? Altijd handig om te testen.

Maar wellict werkt zoiets:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT id, naam, bedrag
FROM dbinschrijvingen
WHERE bedrag != '.$volledig_bedrag.'
ORDER BY saldo DESC


Even (via PHP) $volledig_bedrag vullen (met jouw voorbeeld zou dat 50 zijn).
En dan krijg je alle die nog niet alles betaald hebben.
 
Sander van Schalken

Sander van Schalken

03/11/2009 09:54:00
Quote Anchor link
erg slim eigenlijk zeg... niet aan gedacht... ik ga het meteen uitproberen en laat het weten als het werkt !
Thanx.
 
Sander van Schalken

Sander van Schalken

06/11/2009 13:11:00
Quote Anchor link
Het werkt natuurlijk... enige probleem is dat er leden zijn die niet het volledige bedrag betalen, dus kan dus query helaas niet.

er moet toch echt iets komen met allemaal AND en OR anders werkt het niet.

Zoiets van:
SELECT * FROM dbinschrijvingen WHERE (bedrag NOT between 1 AND 100) OR (bedrag mag leeg zijn als saldo is gevuld en betaalddatum is leeg)
 
Sander van Schalken

Sander van Schalken

13/11/2009 19:35:00
Quote Anchor link
SELECT * FROM dbinschrijvingen WHERE bedrag NOT between 1 and 500
UNION
SELECT * FROM dbinschrijvingen WHERE
bedrag mag leeg zijn als saldo is gevuld en betaalddatum is leeg

Iemand die het verder weet.. met CASE of IT/THEN ofzo?
 
Arnold C

Arnold C

13/11/2009 20:06:00
Quote Anchor link
Begrijp ik het goed:
lidmaatschap 50 euro, je zoekt iedereen die:
of nog niet betaald heeft: bedrag = 0 en saldo = 50
of die een deel betaald heeft: bedrag < 50 en saldo >0

maar als alles betaald is:
bedrag = 50
saldo = 0

Probeer eens:

SELECT id, naam
FROM dbinschrijvingen
WHERE (bedrag < 50 OR saldo >0)
 
Sander van Schalken

Sander van Schalken

18/11/2009 11:34:00
Quote Anchor link
Zo makkelijk is het niet Arnold. Het lidmaatschap is voor verschillende leden weer anders door b.v. korting. Het moet echt zijn zoals ik in mijn vorige post heb gedaan.
Ik kom er echt niet uit, maar elke hulp is welkom !
 
Jeroen Jansen

Jeroen Jansen

18/11/2009 12:01:00
Quote Anchor link
Het zal wel te simpel gedacht zijn, maar je zegt in de beginpost dat wanneer alles betaald is het veld saldo 0 is. Dan heb je toch voldoende aan:
SELECT *
FROM dbinschrijvingen
WHERE saldo > 0
 
Arnold C

Arnold C

20/11/2009 14:22:00
Quote Anchor link
Jammer! Dan heb ik je vraag nog niet goed voor ogen:

Wat staat in welke tabel (wat sla je op in welk veld) en welke gegevens zoek je?
Gewijzigd op 01/01/1970 01:00:00 door Arnold C
 
- SanThe -

- SanThe -

20/11/2009 14:41:00
Quote Anchor link
Wat is dit?
`geboortedatumdag` varchar(9) NOT NULL default '',
`geboortedatummaand` varchar(9) NOT NULL default '',
`geboortedatumjaar` smallint(4) NOT NULL default '0',

Waarom niet gewoon een DATE veld?
 
Justin S

Justin S

20/11/2009 14:48:00
Quote Anchor link
Ik denk dat het een vrij oud systeem is ;)! De databasestuctuur kan heel goed genormaliseerd worden. NAW gegevens scheiden van bankzaken e.d.
 



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.