Explode toepassen op twee kolommen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Marcus geleyn

marcus geleyn

07/08/2016 17:11:50
Quote Anchor link
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
}
}
}
 
PHP hulp

PHP hulp

26/04/2024 06:15:02
 
Ben van Velzen

Ben van Velzen

07/08/2016 17:16:05
Quote Anchor link
Meerdere waarden in 1 kolom is onhandig, ga dus normaliseren. Dan kun je daarna gewoon in je query vragen wat je precies wil hebben.
 
Marcus geleyn

marcus geleyn

07/08/2016 19:57:04
Quote Anchor link
Tja, maar dan worden het wel ontzettend veel kolommen. "Explode" werkt uitstekend, maar het zou nu op twee kolommen moeten toegepast worden. Enig idee?
 
- Ariën  -
Beheerder

- Ariën -

07/08/2016 20:05:40
Quote Anchor link
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.
 
Marcus geleyn

marcus geleyn

07/08/2016 20:28:07
Quote Anchor link
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.
 
- Ariën  -
Beheerder

- Ariën -

07/08/2016 20:33:54
Quote Anchor link
Maar waarom wil je dit, terwijl normaliseren een stuk efficiënter is?
 
Marcus geleyn

marcus geleyn

07/08/2016 20:55:45
Quote Anchor link
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.
 
- SanThe -

- SanThe -

07/08/2016 21:22:29
Quote Anchor link
Welke foutmelding krijg je?

Ik zie specialisatie en specialisaties (met en zonder s).
 
- Ariën  -
Beheerder

- Ariën -

07/08/2016 21:23:55
Quote Anchor link
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?
 
Adoptive Solution

Adoptive Solution

07/08/2016 21:31:35
Quote Anchor link
Probeer het eens zonder de aanhalingstekens.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if(in_array('$doelgroep', $hlp1))
 
Marcus geleyn

marcus geleyn

07/08/2016 23:27:18
Quote Anchor link
- 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.

Toevoeging op 07/08/2016 23:29:06:

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

Probeer het eens zonder de aanhalingstekens.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if(in_array('$doelgroep', $hlp1))



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 éé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
 
Ben van Velzen

Ben van Velzen

07/08/2016 23:48:07
Quote Anchor link
Ai, onbekend terrein, dan is dat dus niet handig.
</sarcasme>
Resultaten uit meerdere tabellen tegelijk halen doe je met de hulp van JOINs. Zie http://www.w3schools.com/sql/sql_join.asp
 
Adoptive Solution

Adoptive Solution

07/08/2016 23:48:49
Quote Anchor link
Dit gebruik ik om de gegevens te tonen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
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>";
            }
        }

    }
}
 
DavY -

DavY -

08/08/2016 12:15:52
Quote Anchor link
@Adoptive Solution,

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?
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.