Hallo,
ik probeer uit mijn database een beroep te halen uit collumn "beroepen" en dat werkt. Maar nu wil ik extra filteren op een specialisatie uit de collumn "specialisaties". Ik heb onderstaande code die werkt tot //Extra filter op specialisatie, maar in zijn totaliteit werkt het niet op deze manier. Kan iemand mij zeggen wat ik verkeerd doe? Bedankt.

$sql = "SELECT id, member, beroep, specialisatie FROM users WHERE land = $keuzeland AND doelgroep = '$keuzedoelgroep' ORDER BY plaatsprakt";

$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc())
{
$hlp = explode(',', $row["beroep"]);
if(in_array($rubriek, $hlp))
{
// Extra filter op specialisatie
$hlp1 = explode(',', $row["specialisaties"]);
if(in_array('$doelgroep', $hlp1))
{
echo ......Resultaat
}
}
}
Meerdere waarden in 1 kolom is onhandig, ga dus normaliseren. Dan kun je daarna gewoon in je query vragen wat je precies wil hebben.
Tja, maar dan worden het wel ontzettend veel kolommen. "Explode" werkt uitstekend, maar het zou nu op twee kolommen moeten toegepast worden. Enig idee?
Als het veel kolommen worden, gaat dat mogelijk oog tegen normalisatie in. Want ik neem aan dat je diverse eigenschappen bij items wilt plaatsen?

Dan kan je beter met een aparte eigenschappen-tabel werken, waarin je de eigenschappen koppelt met de items.
Sorry, zo een expert ben ik nu ook weer niet. Ik zou al blij zijn als ik explode kon toepassen op twee kolommen. Ik weet dat dat mogelijk is, alleen vind ik niet hoe.
Maar waarom wil je dit, terwijl normaliseren een stuk efficiënter is?
Gewoon omdat ik PHP niet echt goed beheers (anders was mijn vraag ook overbodig). Explode werkte goed op één kolom, dus dacht ik: nu nog op de tweede kolom en daar loopt het mis of doe ik in ieder geval iets verkeerd.

Ik kan onmogelijk heel de database opnieuw gaan indelen, alles uit elkaar gaan halen en in aparte kolommen gaan steken.
Welke foutmelding krijg je?

Ik zie specialisatie en specialisaties (met en zonder s).
Heel de database opnieuw indelen is wel erg overdreven gezegd. De nette manier is dat je gewoon een aparte tabel maakt, waarin je de specialisaties plaatst, en koppelt met de userID's.

Met explode() zou het ook wel kunnen, maar de vraag is: Wat gebeurt er met jouw script?
En waarom wil je niet de betere manier gebruiken die hier aanbevolen wordt?

Probeer het eens zonder de aanhalingstekens.

if(in_array('$doelgroep', $hlp1))

- SanThe - op 07/08/2016 21:22:29

Welke foutmelding krijg je?

Ik zie specialisatie en specialisaties (met en zonder s).


Een foutmelding komt er niet, er wordt gewoon niets geselecteerd.

[size=xsmall]Toevoeging op 07/08/2016 23:29:06:[/size]

Adoptive Solution op 07/08/2016 21:31:35


Probeer het eens zonder de aanhalingstekens.

if(in_array('$doelgroep', $hlp1))




De aanhalingstekens was een fout van mij, dat is al verholpen.

[size=xsmall]Toevoeging op 07/08/2016 23:32:49:[/size]

- Ariën - op 07/08/2016 21:23:55

Heel de database opnieuw indelen is wel erg overdreven gezegd. De nette manier is dat je gewoon een aparte tabel maakt, waarin je de specialisaties plaatst, en koppelt met de userID's.

Met explode() zou het ook wel kunnen, maar de vraag is: Wat gebeurt er met jouw script?
En waarom wil je niet de betere manier gebruiken die hier aanbevolen wordt?


Met één explode werkt het script prima, met een tweede er bij worden er geen resultaten meer weergegeven dus hiet doe ik iets verkeerd.
Ik wil best een tweede tabel aanmaken, maar hoe zo een script in elkaar steekt om in twee tabellen vergelijkingen te gaan zoeken..... dat is onbekend terrein voor mij.

Reageren