mysql: wil 1 record ophalen gelinkt aan andere tables maar daar zijn ook meerdere records

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Francoi gckx

Francoi gckx

27/01/2014 10:53:27
Quote Anchor link
Ik wil op basis van id nummer 1 vacature ophalen
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
SELECT
            bv.bv_id,
            bv.bv_beschrijving,
            bv.bv_functie,
            bv.bv_plaats,
            bv.bv_datum,
            bawgev.bawgev_bedrijfsnaam,
            vb.vb_benodigheden,
            vi.vi_inbegrepen
            FROM beheer_vacatures bv
            INNER JOIN beheer_accounts_werkgever bawgev
            ON bawgev.bawgev_id = bv.bawgev_id
            INNER JOIN vacature_benodigheden vb
            ON
            vb.bv_id = bv.bv_id
            LEFT JOIN vacature_inbegrepen vi
            ON
            vi.bv_id = bv.bv_id
            WHERE bv.bv_id = 7 AND bv.bawgev_id = 5


Dit geeft die weer:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
bv_id     bv_beschrijving     bv_functie     bv_plaats     bv_datum     bawgev_bedrijfsnaam     vb_benodigheden     vi_inbegrepen
7     agina    again     again     2014-01-23 02:29:31     654321     baan6     inbegrepen 1
7     agina    again     again     2014-01-23 02:29:31     654321     baan10     inbegrepen 1
7     agina    again     again     2014-01-23 02:29:31     654321     baan9     inbegrepen 1
7     agina    again     again     2014-01-23 02:29:31     654321     baan10     inbegrepen 2
7     agina    again     again     2014-01-23 02:29:31     654321     baan9     inbegrepen 2
7     agina    again     again     2014-01-23 02:29:31     654321     baan6     inbegrepen 2
7     agina    again     again     2014-01-23 02:29:31     654321     baan9     inbegrepen 3
7     agina    again     again     2014-01-23 02:29:31     654321     baan6     inbegrepen 3
7     agina    again     again     2014-01-23 02:29:31     654321     baan10     inbegrepen 3


Van benodigheden en inbegrepen zijn er van beide 2 extra records hoe krijg ik ze allebei in een eigen array aangezien het van allebei maar de eerste record toont in php(-dan-)
Gewijzigd op 27/01/2014 12:24:45 door Francoi gckx
 
PHP hulp

PHP hulp

21/12/2024 12:55:01
 
- Ariën  -
Beheerder

- Ariën -

27/01/2014 11:59:34
Quote Anchor link
- Aar -:
Beste Francoi Gckx,
Meerdere mensen op dit PHPhulp forum hebben vragen over MySQL, dus bij deze wil ik je graag verzoeken om een betere titel te bedenken. Dit kan door jouw bericht te bewerken.
Op deze manier zien anderen in een oogopslag direct wat jouw probleem is.
Alvast bedankt!
Gewijzigd op 27/01/2014 12:39:17 door - Ariën -
 
Francoi gckx

Francoi gckx

27/01/2014 13:50:37
Quote Anchor link
Als ik DISTINCT achter select zet dan hoort die 3 records te laten zien maar hij laat nog steeds 9 zien
 
Erwin H

Erwin H

27/01/2014 13:59:41
Quote Anchor link
Dat komt omdat elke rij anders is. Dus krijg je ook alle 9 te zien.

Wat je wilt kan in feite niet, althans niet op deze manier. Als je alleen de vacature zelf wil hebben (1 record) en apart de extra velden uit de andere twee tabellen, dan zal je dat in aparte queries moeten ophalen. Wil je het samenvoegen dan krijg je meerdere records. Ook via een GROUP BY of DISTINCT kan je dat eigenlijk niet oplossen, omdat dan niet gedefinieerd is welke waardes je terugkrijgt.
 
Francoi gckx

Francoi gckx

27/01/2014 14:13:17
Quote Anchor link
Ok dat is jammer dan probeer ik het zo op te lossen om extra queries te vermijden

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
$vb_update = array();
    $j = 0;
    foreach($update as $key => $value)
        {
            foreach($value as $key1 => $value1)
                {
                    if($key1 == "vb_benodigheden")
                        {
                            $vb_update[$j] = $value1;
                        }
                    $j++;
                }
        }
    $vb_update = array_unique($vb_update);
echo count($vb_update);


Resultaat:
4 Array ( [2] => 7 [13] => baan6 [61] => baan9 [109] => baan10 )

Is er nog een elegante manier om de [2] => 7 portie weg te halen?, ik focus hier even op de vb_benodigheden die ik wil als output
 
Erwin H

Erwin H

27/01/2014 14:25:23
Quote Anchor link
Als je wel alle waardes wilt hebben (dat was me niet duidelijk) dan kan je het wel anders doen:
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
SELECT bv.bv_id, bv.bv_beschrijving, bv.bv_functie, bv.bv_plaats, bv.bv_datum,
  bawgev.bawgev_bedrijfsnaam,
  GROUP_CONCAT(vb.vb_benodigheden) AS vb_benodigheden,
  GROUP_CONCAT(vi.vi_inbegrepen) AS vi_inbegrepen
FROM beheer_vacatures bv
INNER JOIN beheer_accounts_werkgever bawgev
  ON bawgev.bawgev_id = bv.bawgev_id
INNER JOIN vacature_benodigheden vb
  ON vb.bv_id = bv.bv_id
LEFT JOIN vacature_inbegrepen vi
  ON vi.bv_id = bv.bv_id
WHERE bv.bv_id = 7 AND bv.bawgev_id = 5
GROUP BY bv.bv_id, bv.bv_beschrijving, bv.bv_functie, bv.bv_plaats, bv.bv_datum,
  bawgev.bawgev_bedrijfsnaam

Nu krijg je alle waardes voor 'benodigheden' en 'inbegrepen' in 1 veld, gescheiden met een komma. Die kan je vervolgens explode op de komma en heb je de arrays die je wilt.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

27/01/2014 17:06:43
Quote Anchor link
Vergeet de DISTINCT niet bij GROUP_CONCAT.
Je kan daarin ook eventueel nog sorteren of zelf de separator bepalen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
GROUP_CONCAT(DISTINCT vb.vb_benodigheden ORDER BY vb.vb_benodigheden SEPARATOR '|')
 
Francoi gckx

Francoi gckx

27/01/2014 18:01:43
Quote Anchor link
Dat is een stuk overzichterlijker thank you

Toevoeging op 27/01/2014 18:03:09:

Oh ook bedankt Ger! zag jou post nog niet
 



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.