Juiste selectie
Wat is de juiste manier om dit te verwerken? Dit is wat ik geprobeerd heb en geen van deze werkt.
if(isset($_GET['Vacht']) and ($_GET['Vacht'] === "alles"))
{ $Vacht = '';}
of {$Vacht = "";}
of {$Vacht = "%";}
of iets anders?
Gewijzigd op 13/03/2016 22:29:59 door Marina janssen
Nu krijg ik het idee dat je een resultaat hebt van een gesubmitte pagina.
Laat je query eerst eens zien.
$sql = "SELECT Nummer FROM katten WHERE Code = '$Code' AND Datum >= '$Datum' AND Vacht LIKE '$Vacht'";
EN inhoud kolom code gelijk is $code
EN inhoud van kolom Datum >= $datum
EN inhoud van kolom Vacht lijkt op $Vacht
Wanneer je de vacht ook in de resultaat rijen wilt hebben zal je deze ook in de select op moeten nemen.
SELECT Nummer, vacht FROM katten
Vervolgens kan je mbv een loop alle vachten tonen die in het query resultaat staan.
Wanneer ik de vraag in je openingstopic goed berijp zou de query als volgt moeten zijn:
SELECT vacht FROM katten
Hiermee krijg je van alle rijen de vacht als resultaat.
Gewijzigd op 14/03/2016 00:41:22 door Pipo Clown
De truuk is denk ik om de zoekquery interactief op te bouwen en alleen die criteria in je query op te nemen waarvoor specifieke waarden zijn opgegeven. Wanneer er niet expliciet iets is opgegeven over vacht, neem je dit simpelweg niet op als argument in de (interactief te bouwen) query(string).
Gewijzigd op 14/03/2016 13:29:29 door Thomas van den Heuvel
Thomas van den Heuvel op 14/03/2016 13:25:22:
Indien vacht .... hoef je dit niet als zoekcriterium op te nemen in je query :).
Jwel, want er zijn ook mogelijkheden die wel wel Vacht selecteren dus Vacht zit in de paginatie. Ik kan het niet zomaar weglaten. Ik heb het nu opgelost door de query te splitsen met if, de ene is dat en de andere en dan werkt de paginatie gewoon.
Maar ik heb ook nog een radiobutton die ik toe wil voegen die ook al de query splitst en dan wordt het wel erg ingewikkeld. Is er niet een methode dat je alles kan selecteren ongeacht de inhoud zodat ik niet hoef te splitsen?
Gewijzigd op 14/03/2016 17:37:10 door marina janssen
Bouw je query dynamisch op, zoals Thomas ook aangeeft.
eeh wat bedoel je daarmee? Hoe bouw je dynamisch?
Gewijzigd op 14/03/2016 22:10:32 door - Ariën -
is er niet een wildcard, zoals bv bij select, dat je met een * alle kolommen selecteert, maar dan voor de inhoud van alle rijen?
Gewijzigd op 14/03/2016 22:42:53 door marina janssen
SELECT * FROM tabelnaam
Of de nodige velden (aan te raden):
SELECT alle,nodige,velden FROM tabelnaam
Over het dynamisch opbouwen, zoiets:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
$myQuery = 'SELECT <relevante kolommen> FROM <tabel>';
$separator = ' WHERE ';
// Is zoekcritrerium #1 ingesteld?
if (
isset($_GET['criterium_1'])
&&
// en dan hier nog een controle om na te gaan of de waarde toegestaan is...
// en wellicht nog andere logica die bepaalt of het zinnig is om het argument toe te voegen aan de query
) {
// argument omgeschreven naar een vorm die hout snijdt in je query
$argValue = ...;
$myQuery .= $separator." kolomnaam_criterium_1 = '".mysqli_real_escape_string($link, $argValue);
$separator = ' AND ';
}
// Is zoekcritrerium #2 ingesteld?
if (
isset($_GET['criterium_2'])
&&
// en dan hier nog een controle om na te gaan of de waarde toegestaan is...
// en wellicht nog andere logica die bepaalt of het zinnig is om het argument toe te voegen aan de query
) {
// argument omgeschreven naar een vorm die hout snijdt in je query
$argValue = ...;
$myQuery .= $separator." kolomnaam_criterium_2 = '".mysqli_real_escape_string($link, $argValue);
// omdat op voorhand niet vaststaat welke criteria zijn geselecteerd blijft de volgende regel nodig
$separator = ' AND ';
}
// et cetera
// ...
// na afloop is $myQuery je opgebouwde query
?>
$myQuery = 'SELECT <relevante kolommen> FROM <tabel>';
$separator = ' WHERE ';
// Is zoekcritrerium #1 ingesteld?
if (
isset($_GET['criterium_1'])
&&
// en dan hier nog een controle om na te gaan of de waarde toegestaan is...
// en wellicht nog andere logica die bepaalt of het zinnig is om het argument toe te voegen aan de query
) {
// argument omgeschreven naar een vorm die hout snijdt in je query
$argValue = ...;
$myQuery .= $separator." kolomnaam_criterium_1 = '".mysqli_real_escape_string($link, $argValue);
$separator = ' AND ';
}
// Is zoekcritrerium #2 ingesteld?
if (
isset($_GET['criterium_2'])
&&
// en dan hier nog een controle om na te gaan of de waarde toegestaan is...
// en wellicht nog andere logica die bepaalt of het zinnig is om het argument toe te voegen aan de query
) {
// argument omgeschreven naar een vorm die hout snijdt in je query
$argValue = ...;
$myQuery .= $separator." kolomnaam_criterium_2 = '".mysqli_real_escape_string($link, $argValue);
// omdat op voorhand niet vaststaat welke criteria zijn geselecteerd blijft de volgende regel nodig
$separator = ' AND ';
}
// et cetera
// ...
// na afloop is $myQuery je opgebouwde query
?>
Gewijzigd op 15/03/2016 00:41:11 door Thomas van den Heuvel
Iets als:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
$aData = (new cMySQLiQuery())
->from('mijntabel')
->select('vacht')
->execute();
?>
$aData = (new cMySQLiQuery())
->from('mijntabel')
->select('vacht')
->execute();
?>
(Maar dan geïmplementeerd :)
Mijn voorbeeld illustreerde slechts een manier en was ook eigenlijk alleen daarvoor bedoeld: illustreren. Als de TS een of meer abstractielagen wil gebruiken, by all means.