Explode toepassen op twee kolommen
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?
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?
Ik kan onmogelijk heel de database opnieuw gaan indelen, alles uit elkaar gaan halen en in aparte kolommen gaan steken.
Ik zie specialisatie en specialisaties (met en zonder 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?
- SanThe - op 07/08/2016 21:22:29:
Welke foutmelding krijg je?
Ik zie specialisatie en specialisaties (met en zonder s).
Ik zie specialisatie en specialisaties (met en zonder s).
Een foutmelding komt er niet, er wordt gewoon niets geselecteerd.
Toevoeging op 07/08/2016 23:29:06:
Adoptive Solution op 07/08/2016 21:31:35:
De aanhalingstekens was een fout van mij, dat is al verholpen.
Toevoeging op 07/08/2016 23:32:49:
- 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 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.
Gewijzigd op 07/08/2016 23:27:59 door marcus geleyn
</sarcasme>
Resultaten uit meerdere tabellen tegelijk halen doe je met de hulp van JOINs. Zie http://www.w3schools.com/sql/sql_join.asp
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
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
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
echo "<pre>";
print_r($row);
echo "</pre>";
$hlp = explode(',', $row["beroep"]);
echo "<pre>";
print_r($hlp);
echo "</pre>";
$spec = explode(',', $row["specialisaties"]);
echo "<pre>";
print_r($spec);
echo "</pre>";
if(in_array($rubriek, $hlp)) {
echo $rubriek . " in " . $hlp . "<br />";
// Extra filter op specialisatie
$hlp1 = explode(',', $row["specialisaties"]);
if(in_array( $doelgroep, $hlp1)) {
echo $doelgroep . " in " . $hlp1 . "<br />";
echo "<pre>";
print_r($hlp1);
echo "</pre>";
}
}
}
}
// output data of each row
while($row = $result->fetch_assoc()) {
echo "<pre>";
print_r($row);
echo "</pre>";
$hlp = explode(',', $row["beroep"]);
echo "<pre>";
print_r($hlp);
echo "</pre>";
$spec = explode(',', $row["specialisaties"]);
echo "<pre>";
print_r($spec);
echo "</pre>";
if(in_array($rubriek, $hlp)) {
echo $rubriek . " in " . $hlp . "<br />";
// Extra filter op specialisatie
$hlp1 = explode(',', $row["specialisaties"]);
if(in_array( $doelgroep, $hlp1)) {
echo $doelgroep . " in " . $hlp1 . "<br />";
echo "<pre>";
print_r($hlp1);
echo "</pre>";
}
}
}
}
Mag ik je een tip geven? Waarom dubbele echo's? Het maakt je code onnodig langer. Houd het gewoon simpel met 1 echo en ik weet niet of het je bedoeling is, maar wat als num_rows geen resultaten geeft, dan meld ie namelijk helemaal niks?