Tabel gegevens weergeven via join en distinct

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Piet Knaap

Piet Knaap

02/01/2013 11:06:08
Quote Anchor link
Ik heb twee Mysql tabellen. In tabel 1 heb ik voornamen staan in tabel 2 heb ik gegevens van deze medewerkers staan. Een medewerker van tabel 1 komt meerdere keren voor in tabel 2. Zie mijn voorbeeld

Voorbeeld
Tabel1
ID1 Naam
1 Piet
2 Kees
3 Klaas

Tabel2
ID2 ID1 Tekst
1 1 Test Piet
2 1 Test2
3 1 Test3 Piet
4 2 Test Kees
5 3 Test Klaas

Mysql query
SELECT DISTINCT Tabel1.Naam,Tabel2.Tekst FROM Tabel1
LEFT JOIN Tabel2 ON (Tabel2.ID1=Tabel1.ID1)
WHERE Tabel2.Tekst NOT LIKE '%Test2%' ORDER BY Naam

Nu wil ik dat het record van Piet niet (ID1 1) wordt weergegeven in de select. Op het ogenblik krijg ik drie record terug... Ik wil alleen het resultaat van Kees en Klaas zien in de select. Ik heb de Not like al direct in de join gezet, of met outer join, inner join maar dat werkt ook helaas niet.
 
PHP hulp

PHP hulp

24/11/2024 12:23:23
 
Ivo Breeden

Ivo Breeden

02/01/2013 11:27:09
Quote Anchor link
Werkt dit niet?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
SELECT DISTINCT Tabel1.Naam,Tabel2.Tekst FROM Tabel1
LEFT JOIN Tabel2 ON (Tabel2.ID1=Tabel1.ID1)
WHERE Tabel2.Tekst NOT LIKE '%Test2%'
AND Tabel1.ID1 != 1
ORDER BY Naam

Je schrijft dat je met de beschreven query 3 records terug krijgt. Dat snap ik niet, want in die query wordt alleen het record met 'Test2' uitgezonderd, zodat er 4 records overblijven.
 
Piet Knaap

Piet Knaap

02/01/2013 11:37:58
Quote Anchor link
Bedankt voor de reactie!

Sorry voor de verwarring Ik had "Tabel2.Tekst" weghaal uit mijn query.
Het per ID uitfilteren is helaas geen optie omdat er meer dan deze 5 records in tabel 2 staan. Ik wil alleen de records wegfilteren waarbij "Test2" is ingevuld met het daarbij behorende id van tabel1. Dus in het onderstaande voorbeeld wil ik alleen Test Kees en Test Klaas terug krijgen

1 1 Test Piet
2 1 Test2
3 1 Test3 Piet

4 2 Test Kees
5 3 Test Klaas
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

02/01/2013 12:01:40
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
SELECT
    t1.naam,
    t2.tekst
FROM
    tabel1 t1
INNER JOIN
    tabel2 t2 ON t1.id1 = t2.id1
WHERE
    t1.id1 NOT IN (SELECT DISTINCT id1 FROM tabel2 WHERE tekst LIKE '%test2%')
 
Piet Knaap

Piet Knaap

03/01/2013 08:24:49
Quote Anchor link
Super Ger de query werkt! Alleen als ik er een count bij zet (bij de eerste select) krijg ik een heel vreemd totaal terug? Als ik de count weghaal krijg ik wel de juiste records terug.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

03/01/2013 10:02:59
Quote Anchor link
COUNT() is in principe bedoeld in combinatie met een group by, als er meerdere kolommen in de select staan.
Wil je nu toch weten (zonder in php te hoeven tellen) hoeveel keer bepaalde persoon in tabel2 voorkomen kan je zoiets 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
15
16
17
18
19
20
SELECT
    t1.naam,
    t1.aantal,
    t2.tekst
FROM
    (SELECT
        t1a.naam,
        t1a.id1,
        COUNT(t2a.id) aantal
    FROM
        tabel1 t1a
    INNER JOIN
        tabel2 t2a ON t1a.id1 = t2a.id1
    GROUP BY
        t1a.naam, t1a.id1
    HAVING
        t1a.id1 NOT IN (SELECT DISTINCT id1 FROM tabel2 WHERE tekst LIKE '%test2%')
    ) t1
INNER JOIN
    tabel2 t2 ON t1.id1 = t2.id1
 



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.