Door
E Ander
op 28-04-2020 10:37
gewijzigd op 28-04-2020 10:39
1.752 views
Ik ben bezig om de CSV rekeningoverzicht data van ING en SNS thuis in een database te stoppen. Dan wil ik in die data kunnen zoeken op rekeningnummer, jaar, af of bij en mededeling. Stuk voor stuk lukt mij prima. Alles van zoek opdracht voorzien lukt mij maar als ik een zoekterm oversla omdat ik daar geen selectie op wil maken, krijg ik geen data te zien.
B.v. ik wil weten op welke rekening iets bijgeschreven is. Ik kies dus geen waarde in rekening, geen waarde in mededeling en ook niet in jaar maar waarde 'bij' bij 'bij/af'. Dan krijg ik niet uit de database van alle rekeningen dat er iets bij geschreven is te zien.
Ik heb geprobeerd met rekening="" of met rekening="*" maar ik blijf geen uitdraai van de database zien als ik niet voor elke selectie een keuze maak.
Ook inplaats van WHERE rekening='".$rekening."' AND bij_af etc.. geprobeerd met WHERE rekening LIKE'%".$rekening."%" hielp niet.
Kan iemand mij verder helpen?
Alvast bedankt.
Peter
Arien en Jan, bedankt voor het meedenken. Arien, Ik begrijp de opmerking via myadmin niet. De data is te benaderen. De opmerking % ipv * had ik nog niet geprobeerd.
Jan, om de opdracht in stukjes te verdelen had ik ook gedacht maar dat wordt lastig met de wel of niet noodzakelijke 'AND'. De % werkt net als * niet bij mij.
Jan, dat laatste is de gouden tip. LIKE '".$rekening."'. Bij echo "<option value='%'>Kies de rekening </option>"; daar beginnen met %. Nu krijg ik altijd data te zien en door een keuze te maken valt er een deel weg.
Bedankt, nu kan ik veel dingen controleren zonder telkens bij een andere website van een bank te moeten inloggen.
Thomas, wellicht wel handig om dat te vermelden. Ik nam dat als vanzelfsprekend aan. Eerst had ik losse verschillende zoek opdrachten en werd het geheel er onduidelijk. Nu is er 1 sql regel die door strings ingevuld wordt. Dit werkt nu echt heel makkelijk en overzichtelijk.
Constructies als rekeningnummer LIKE '%' zijn dus niet nodig. Indien er geen rekening wordt geselecteerd, laat dan deze conditie in het geheel achterwege uit de query. Dat bedoel ik met het dynamisch opbouwen van de SQL. Wat je dus niet moet doen is voor al deze condities altijd geldige waarden invullen zoals '%'. Dan schiet je je doel voorbij.
?
Onbekende gebruiker
30-04-2020 10:17
Het is logischer om de code die rijen voorwaardelijk selecteert in de database te doen:
SELECT "NL12BANK34567890" INTO @iban;
SELECT "test" INTO @mededeling;
SELECT * FROM `tabel`
WHERE (@iban IS NULL OR `rekening` = @iban)
AND (@mededeling IS NULL OR `mededeling` LIKE CONCAT("%", @mededeling, "%"));
Een alternatief voor variabelen in MySQL is het gebruik van parameters in een prepared statement, dan kan de SQL er zo uitzien:
SELECT * FROM `tabel`
WHERE ($1 IS NULL OR `rekening` = $1) -- $1 is gevuld met IBAN
AND ($2 IS NULL OR `mededeling` LIKE CONCAT("%", $2, "%")); -- $2 met een stukje van de mededeling
Ad, bedankt voor jouw reactie. Het gaat er mij om dat ik geregeld verschillende dingen wil vinden in een database van verschillende rekeningen.
Soms alles van 1 rekening, De andere keer wil ik b.v. weten waar de belasting op terug gestord is. Soms dus zoeken op rekening, soms op mededeling dan weer op bij/af of datum. Die zoek mogelijkheid wil ik het liefst in een form met 1 opdracht. Nu kan ik een zoekopdracht zenden en alleen dat gene invullen waar ik op wil zoeken. Als ik geen keuze maak krijg ik alle data te zien.