mysql: wil 1 record ophalen gelinkt aan andere tables maar daar zijn ook meerdere records
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
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)
1
2
3
4
5
6
7
8
9
10
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
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
- 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!
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 -
Als ik DISTINCT achter select zet dan hoort die 3 records te laten zien maar hij laat nog steeds 9 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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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);
$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
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
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.
Je kan daarin ook eventueel nog sorteren of zelf de separator bepalen:
Toevoeging op 27/01/2014 18:03:09:
Oh ook bedankt Ger! zag jou post nog niet