alle data zonder selectie
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?
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
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 "%"
Bedankt, nu kan ik veel dingen controleren zonder telkens bij een andere website van een bank te moeten inloggen.
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.
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
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.