Mysql table join vraagje
Goedemiddag Forumleden,
IK heb een misschien lastige vraag maar als iemand het kan oplossen zijn jullie het wel.
Dit is het probleem:
Eindgebruiker zoekt op: "Laser".
Nu wil ik alle bedrijven en domeinen weergeven waarin dit woord voorkomt maar als het bedrijf al gevonden word moet die niet ook nog eens de website die gekoppeld is aan het bedrijf weergeven anders krijgen we dubbele data, enkels dus unieke.
Bedrijven tabel heeft: (bedrijfsnaam, domein_id).
Domeinen tabel heeft: (id, domein).
Ik vermoed dat dit via een join moet en hier ben ik heel slecht in.
Deze 2 queries had ik zelf bedacht maar zorgt niet voor het resultaat dat ik zoek:
IK heb een misschien lastige vraag maar als iemand het kan oplossen zijn jullie het wel.
Dit is het probleem:
Eindgebruiker zoekt op: "Laser".
Nu wil ik alle bedrijven en domeinen weergeven waarin dit woord voorkomt maar als het bedrijf al gevonden word moet die niet ook nog eens de website die gekoppeld is aan het bedrijf weergeven anders krijgen we dubbele data, enkels dus unieke.
Bedrijven tabel heeft: (bedrijfsnaam, domein_id).
Domeinen tabel heeft: (id, domein).
Ik vermoed dat dit via een join moet en hier ben ik heel slecht in.
Deze 2 queries had ik zelf bedacht maar zorgt niet voor het resultaat dat ik zoek:
Code (php)
1
2
3
4
5
2
3
4
5
<?php
$q = "SELECT * FROM bedrijven WHERE bedrijfsnaam LIKE '%$input%' or domein_id = ".getDomeinIdByDomeinName($input)." ORDER BY id ASC";
$q = SELECT bedrijven.bedrijfsnaam, domeinen.domein FROM bedrijven INNER JOIN domeinen ON bedrijven.domein_id = domeinen.id WHERE bedrijven.bedrijfsnaam = '%laser%' OR domeinen.domein = '%laser%'
?>
$q = "SELECT * FROM bedrijven WHERE bedrijfsnaam LIKE '%$input%' or domein_id = ".getDomeinIdByDomeinName($input)." ORDER BY id ASC";
$q = SELECT bedrijven.bedrijfsnaam, domeinen.domein FROM bedrijven INNER JOIN domeinen ON bedrijven.domein_id = domeinen.id WHERE bedrijven.bedrijfsnaam = '%laser%' OR domeinen.domein = '%laser%'
?>
Gewijzigd op 17/10/2017 11:33:34 door Furio Scripting
Die 2e query is bijna goed. Alleen moet je "like '%laser%'" ipv "= '%laser%'" gebruiken.
Ik heb de oplossing nu alleen krijg ik dubbele content omdat ik de loop in een loop heb staan ,hoe los ik dit op met de huidige code die wel goed werkt...
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
32
33
34
35
36
37
38
39
40
41
42
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
32
33
34
35
36
37
38
39
40
41
42
<?php
$database = new database();
//$q = "SELECT * FROM bedrijven WHERE bedrijfsnaam LIKE '%$input%' or domein_id = ".getDomeinIdByDomeinName($input)." ORDER BY id ASC";
$q = "SELECT bedrijfsnaam, domein_id from bedrijven WHERE bedrijfsnaam LIKE '%$input%'";
$result = $database->query($q);
while ($rows = mysqli_fetch_assoc($result))
{
echo $rows['bedrijfsnaam'].'(Bedrijf!)<br/>';
$qq = "SELECT domein, id from domeinen where domein LIKE '%$input%'";
$resultt = $database->query($qq);
while ($rowss = mysqli_fetch_assoc($resultt))
{
if ($rows['domein_id'] != $rowss['id'])
{
//echo $rows['bedrijfsnaam'].'<br/>';
echo $rowss['domein'].'<br/>';
}
else
{
}
}
}
?>
$database = new database();
//$q = "SELECT * FROM bedrijven WHERE bedrijfsnaam LIKE '%$input%' or domein_id = ".getDomeinIdByDomeinName($input)." ORDER BY id ASC";
$q = "SELECT bedrijfsnaam, domein_id from bedrijven WHERE bedrijfsnaam LIKE '%$input%'";
$result = $database->query($q);
while ($rows = mysqli_fetch_assoc($result))
{
echo $rows['bedrijfsnaam'].'(Bedrijf!)<br/>';
$qq = "SELECT domein, id from domeinen where domein LIKE '%$input%'";
$resultt = $database->query($qq);
while ($rowss = mysqli_fetch_assoc($resultt))
{
if ($rows['domein_id'] != $rowss['id'])
{
//echo $rows['bedrijfsnaam'].'<br/>';
echo $rowss['domein'].'<br/>';
}
else
{
}
}
}
?>
Gewijzigd op 17/10/2017 14:49:04 door Furio Scripting
Quote:
Nu wil ik alle bedrijven en domeinen weergeven waarin dit woord voorkomt maar als het bedrijf al gevonden word moet die niet ook nog eens de website die gekoppeld is aan het bedrijf weergeven anders krijgen we dubbele data, enkels dus unieke.
Maar, je wilt dus beide hebben.
Wanneer je een query in een loop uitvoert zou er een alarmbel moeten afgaan, dat is meestal geen goed ontwerp.
Het probleem zit hem dus voornamelijk in het weergeven? Dit kun je anders oplossen door bij te houden met welk bedrijf je bezig bent. Verandert in de nieuwe resultaatrij het bedrijf maak je een nieuw kopje voor dat bedrijf.
Bovenstaande kan met één query en een left/inner join mits je sorteert op bedrijf (ik hoop dat die tabel ook een id heeft ?!), en je vervolgens dus bijhoudt welke bedrijfsgegevens (met bijbehorende domeinen) je aan het weergeven bent.
Gewijzigd op 19/10/2017 15:51:48 door Thomas van den Heuvel




