Mysql join loop vraag

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Furio Scripting

Furio Scripting

30/10/2015 12:21:20
Quote Anchor link
Beste forumleden,

Ik kom er even niet meer uit, ik heb 2 tabellen. Eentje heet bedrijf_gegevens en de ander bedrijf_acties.
Online heb ik een mooie sql query gevonden welke via de latitude en longitude bedrijven in de buurt opspport in een bepaalde radius.

Dit werkt perfect maar nu haalt die nu enkel de bedrijven op maar wil ik ook de acties van deze bedrijven kunnen oppikken, hij pakt nu telkens 1 actie ipv alle acties van het bedrijf omdat die eerste query enkel de bedrijven pakt, hoe kan ik ook alle acties ophalen bij de gevonden bedrijven.

De code:

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
  <?php
          
          // hier komen alle acties.
          
           $url="http://maps.googleapis.com/maps/api/geocode/json?address=".urlencode($plaatsnaam)."";
$json = file_get_contents($url);
$data = json_decode($json, TRUE);


 //echo 'latitude: '.$data['results'][0]['geometry']['location']['lat'].'<br/>';
 //echo 'longitude: '.$data['results'][0]['geometry']['location']['lng'].'<br/>';
 //echo 'Plaats: '.$data['results'][0]['formatted_address'].'<br/>';

// echo '<hr>';
 //echo '<h3>Alle restaurants in straal van 25 km.... hemelsbreed dus zonder wegen..</h3>'.'<br/><br/>';

 
      $db = new database(); // Initiate a new MySQL connection
            $tableName = "bedrijf_gegevens";
            $origLat = $data['results'][0]['geometry']['location']['lat'];
            $origLon = $data['results'][0]['geometry']['location']['lng'];
            $dist = 25 ; // This is the maximum distance (in miles) away from $origLat, $origLon in which to search
           $query = "SELECT *, 6371 * 2 *
                      ASIN(SQRT( POWER(SIN(($origLat - abs(latitude))*pi()/180/2),2)
                      +COS($origLat*pi()/180 )*COS(abs(latitude)*pi()/180)
                      *POWER(SIN(($origLon-longitude)*pi()/180/2),2)))
                      as distance FROM $tableName WHERE
                      longitude between ($origLon-$dist/abs(cos(radians($origLat))*69))
                      and ($origLon+$dist/abs(cos(radians($origLat))*69))
                      and latitude between ($origLat-($dist/69))
                      and ($origLat+($dist/69))
                      having distance < $dist ORDER BY distance limit 100;"
;
            $result = $db->query($query);

            while($rows = mysqli_fetch_assoc($result))
            {


             // Bedrijven in de buurt maar zijn er deals?

                $omschrijving =  $rows['lange_omschrijving'];
                
                $stringCut = substr($omschrijving , 0, 180);

                 // Eindigen in een woord.
                 $omschrijving = substr($stringCut, 0, strrpos($stringCut, ' ')).'...';
                
                echo '<div class="col-md-4">';
                
                echo '<div class="image-box team-member">
                                        <div class="overlay-container">
                                            <img style="width:100%; height:275px;" alt="" src="'
.verkrijgBedrijfsHoofdImageByKlantId($rows['klant_id']).'">
                                            <div class="overlay">
                                                <ul class="social-links colored clearfix">
                                                    <li class="facebook"><a href="http://www.facebook.com" target="_blank"><i class="fa fa-facebook"></i></a></li>
                                                    <li class="twitter"><a href="http://www.twitter.com" target="_blank"><i class="fa fa-twitter"></i></a></li>
                                                    <li class="skype"><a href="http://www.skype.com" target="_blank"><i class="fa fa-skype"></i></a></li>
                                                </ul>
                                            </div>
                                        </div>
                                        <div class="image-box-body">
                                            <h3 class="title">'
.verkrijgBedrijfsTypeByBedrijfTypeId($rows['type_bedrijf']).' '.$rows['bedrijfsnaam'].' in '.$rows['plaatsnaam'].'</h3>
                                            <small>'
.verkrijgActieTitelByBedrijfId($rows['klant_id']).'</small>
                                            <div class="separator-2"></div>
                                            <p>'
.verkrijgOmschrijvingByBedrijfId($rows['klant_id']).'</p>
                                        </div>
                                    </div></div>'
;
            
            
            }

  
      ?>

      
 
PHP hulp

PHP hulp

14/03/2025 03:56:42
 
Peter K

Peter K

30/10/2015 13:23:36
Quote Anchor link
Begin eens wat eenvoudiger, welke kolommen komen overeen uit beide tabellen?

Stel dat je een id geeft in bedrijf gegevens die ook in acties staat:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
SELECT
*
FROM
bedrijf_gegevens
INNER JOIN bedrijf_acties
WHERE
bedrijf_gegevens.bedrijf_id = bedrijf_acties.bedrijf_id


Dit zou in principe alles moeten laten zien.
Afhankelijk hoe je database in elkaar zit moet je dus kiezen welk veld overeenkomt.
Zijn dit er meerdere, dan moet je er meerdere invullen.

Nog een tip: probeer eerst je query gewoon op te stellen, dit kan in PHPmyadmin bijvoorbeeld of een andere software als b.v. Workbench.
Gewijzigd op 30/10/2015 13:24:30 door Peter K
 
Furio Scripting

Furio Scripting

30/10/2015 16:24:03
Quote Anchor link
Peter K op 30/10/2015 13:23:36:
Begin eens wat eenvoudiger, welke kolommen komen overeen uit beide tabellen?

Stel dat je een id geeft in bedrijf gegevens die ook in acties staat:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
SELECT
*
FROM
bedrijf_gegevens
INNER JOIN bedrijf_acties
WHERE
bedrijf_gegevens.bedrijf_id = bedrijf_acties.bedrijf_id


Dit zou in principe alles moeten laten zien.
Afhankelijk hoe je database in elkaar zit moet je dus kiezen welk veld overeenkomt.
Zijn dit er meerdere, dan moet je er meerdere invullen.

Nog een tip: probeer eerst je query gewoon op te stellen, dit kan in PHPmyadmin bijvoorbeeld of een andere software als b.v. Workbench.


Klant_id komt in beide tabellen voor maar ik weet niet hoe ik in die moeilijke haversine formule query een join kan inbouwen.
 
Pg Vincent

Pg Vincent

31/10/2015 10:39:34
Quote Anchor link
Dit kun je met een JOIN doen, maar dan krijg je één resulteset waarin alle acties van alle bedrijven zitten en dat moet je dan in PHP weer uit elkaar gaan trekken voor je presentatie.

Als je niet in een high-performance situatie zit dan kun je net zo goed binnen de lus die de haversone data verwerkt een tweede query draaien die per gevonden bedrijf de acties ophaalt zodat je ze apart terugkrijgt per bedrijf.

JOIN is niet altijd de gewenste oplossing!
 
Peter K

Peter K

31/10/2015 18:52:29
Quote Anchor link
Furio Scripting op 30/10/2015 16:24:03:
Peter K op 30/10/2015 13:23:36:
Begin eens wat eenvoudiger, welke kolommen komen overeen uit beide tabellen?

Stel dat je een id geeft in bedrijf gegevens die ook in acties staat:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
SELECT
*
FROM
bedrijf_gegevens
INNER JOIN bedrijf_acties
WHERE
bedrijf_gegevens.bedrijf_id = bedrijf_acties.bedrijf_id


Dit zou in principe alles moeten laten zien.
Afhankelijk hoe je database in elkaar zit moet je dus kiezen welk veld overeenkomt.
Zijn dit er meerdere, dan moet je er meerdere invullen.

Nog een tip: probeer eerst je query gewoon op te stellen, dit kan in PHPmyadmin bijvoorbeeld of een andere software als b.v. Workbench.


Klant_id komt in beide tabellen voor maar ik weet niet hoe ik in die moeilijke haversine formule query een join kan inbouwen.



Check deze anders eens: http://www.w3schools.com/sql/sql_join_inner.asp
 



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.