alle data zonder selectie
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
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
Gewijzigd op 28/04/2020 10:39:45 door E Ander
Heb je het al droog geprobeerd in bijv. phpMyAdmin?
rekening="*" zal zeker niet lukken. Dat is Access sql. in mysql is het rekening="%"
Misschien beter is per zoek mogelijkheid gewoon de where aan te passen met een if-je.
De 1° true is gewoon om geen extra controles te doen. uit luiheid :)
sqlinjectie niet vergeten natuurlijk
Jan
Misschien beter is per zoek mogelijkheid gewoon de where aan te passen met een if-je.
Code (php)
1
$where = 'true ' . ($zoek1='' ? '' : 'and zoekveld1=' . $zoek1) . ($zoek2='' ? '' : 'and zoekveld2=' . $zoek2);
De 1° true is gewoon om geen extra controles te doen. uit luiheid :)
sqlinjectie niet vergeten natuurlijk
Jan
Gewijzigd op 28/04/2020 11:56:13 door Jan R
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, 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.
Gewijzigd op 28/04/2020 13:23:59 door E Ander
E Ander op 28/04/2020 13:15:42:
maar dat wordt lastig met de wel of niet noodzakelijke 'AND'.
Als je iets wilt moet je er moeite voor doen :)
E Ander op 28/04/2020 13:15:42:
De % werkt net als * niet bij mij.
Mijn foutje. Moet via like niet via '=' dus rekening like "%"
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.
Bedankt, nu kan ik veel dingen controleren zonder telkens bij een andere website van een bank te moeten inloggen.
Misschien is het handig om erbij te vermelden dat je in PHP en MySQL aan het werken bent?
Wat mij het meest logische lijkt is de SQL-zoekopdracht opbouwen als string.
Indien een zoekveld niet is ingevuld dan hoeft deze ook niet in de WHERE-conditie opgenomen te worden.
Wat mij het meest logische lijkt is de SQL-zoekopdracht opbouwen als string.
Indien een zoekveld niet is ingevuld dan hoeft deze ook niet in de WHERE-conditie opgenomen te worden.
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.
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
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.
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.




