Langzame site na de volgende php code en probleem met update query binnen loop
Mijn idee om dit tegen te gaan was één keer alle coordinaten op te halen en deze op te slaan in de database en een kolom toe te voegen genaamd `requested` die standaard 0 is. Hierna kan ik checken of requested gelijk is aan 0 en alleen dan een request uitvoeren naar google, waarna de 0 in een 1 verandert.
Ik ben al een eind maar om de een of andere reden worden in mijn database overal dezelfde coordinaten toegevoegd. Dus iets binnen mijn loop gaat niet goed, wat kan dat zijn?
Hier een korte versie van waar ik die coordinaten loop:
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
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
<?php
if($existcheck['requested'] == 0){
$getlatlong = file_get_contents("https://maps.googleapis.com/maps/api/geocode/json?address=".$bedrijven['plaats'].",".$straatnaam."&key=mijnapikey");
$latlongarray = json_decode($getlatlong);
$lat = '';
$lng = '';
// Leeg de latlong na elke loop
foreach ($latlongarray->results as $key => $latlong){
// $latlonglijst .= $latlong->geometry->location->lat.' ';
// $latlonglijst .= $latlong->geometry->location->lng.'<br>';
$lat .= $latlong->geometry->location->lat;
$lng .= $latlong->geometry->location->lng;
// array_push($bedrijvenarray, $lat, $lng);
//$new_array = array('lat'=>''.$lat.'', 'lng'=>''.$lng.'');
}
// Voeg lat en lng toe aan de $bedrijven array
// $bedrijven['lat'] = $new_array['lat'];
// $bedrijven['lng'] = $new_array['lng'];
// $bedrijven['intro_image'] = $image_array['intro_image'];
// $bedrijvenarray1[] = $bedrijven;
$updatetable = "
UPDATE snm_content
SET requested = 1, lat = '".$lat."', lng = '".$lng."'";
$updatetablecon = $conn->query($updatetable);
// echo $updatetable;
}else if($existcheck['requested'] == 1){
}
?>
if($existcheck['requested'] == 0){
$getlatlong = file_get_contents("https://maps.googleapis.com/maps/api/geocode/json?address=".$bedrijven['plaats'].",".$straatnaam."&key=mijnapikey");
$latlongarray = json_decode($getlatlong);
$lat = '';
$lng = '';
// Leeg de latlong na elke loop
foreach ($latlongarray->results as $key => $latlong){
// $latlonglijst .= $latlong->geometry->location->lat.' ';
// $latlonglijst .= $latlong->geometry->location->lng.'<br>';
$lat .= $latlong->geometry->location->lat;
$lng .= $latlong->geometry->location->lng;
// array_push($bedrijvenarray, $lat, $lng);
//$new_array = array('lat'=>''.$lat.'', 'lng'=>''.$lng.'');
}
// Voeg lat en lng toe aan de $bedrijven array
// $bedrijven['lat'] = $new_array['lat'];
// $bedrijven['lng'] = $new_array['lng'];
// $bedrijven['intro_image'] = $image_array['intro_image'];
// $bedrijvenarray1[] = $bedrijven;
$updatetable = "
UPDATE snm_content
SET requested = 1, lat = '".$lat."', lng = '".$lng."'";
$updatetablecon = $conn->query($updatetable);
// echo $updatetable;
}else if($existcheck['requested'] == 1){
}
?>
Hierna ziet mijn database er zo uit:
Ook is mijn website erg traag, zelfs wanneer alle requested velden op 1 staan en dat ligt zeker weten aan deze code want wanneer ik het hele stuk weghaal is hij weer snel.
Hieronder de complete code mocht dat iets makkelijker lezen:
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
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
72
73
74
75
76
77
78
79
80
81
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
72
73
74
75
76
77
78
79
80
81
<?php
$bedrijven = "
SELECT
cnt.id, cnt.title, cnt.introtext, cnt.ordering, cnt.images, cnt.alias, cnt.state, f.item_id,
MAX(CASE WHEN f.field_id = 3 THEN f.value END) AS plaats,
MAX(CASE WHEN f.field_id = 1 THEN f.value END) AS straat
FROM snm_fields_values f
JOIN snm_content cnt
ON cnt.id = f.item_id
WHERE cnt.state = 1
GROUP BY f.item_id
ORDER BY f.item_id, plaats, straat";
$bedrijvencon = $conn->query($bedrijven);
$bedrijvenarray = [];
while($bedrijven = $bedrijvencon->fetch_assoc()){
$straatnaam = '';
$plaatsnaam = '';
// Stop $bedrijven in een array
array_push($bedrijvenarray, $bedrijven);
// Vervang de straatnaam spaties met plusjes voor de filegetcontents url
$straatnaam .= str_replace(' ', '+', $bedrijven['straat']);
$plaatsnaam .= $bedrijven['plaats'];
// Kijk of er al een plaatsnaam en straatnaam in de database bestaan bij het artikel
$existcheck = "
DESC snm_content";
$existcheckcon = $conn->query($existcheck);
$existcheck = $existcheckcon->fetch_assoc();
if($existcheck['requested'] == 0){
$getlatlong = file_get_contents("https://maps.googleapis.com/maps/api/geocode/json?address=".$bedrijven['plaats'].",".$straatnaam."&key=mijnapikey");
$latlongarray = json_decode($getlatlong);
$lat = '';
$lng = '';
// Leeg de latlong na elke loop
foreach ($latlongarray->results as $key => $latlong){
// $latlonglijst .= $latlong->geometry->location->lat.' ';
// $latlonglijst .= $latlong->geometry->location->lng.'<br>';
$lat .= $latlong->geometry->location->lat;
$lng .= $latlong->geometry->location->lng;
// array_push($bedrijvenarray, $lat, $lng);
//$new_array = array('lat'=>''.$lat.'', 'lng'=>''.$lng.'');
}
// Voeg lat en lng toe aan de $bedrijven array
// $bedrijven['lat'] = $new_array['lat'];
// $bedrijven['lng'] = $new_array['lng'];
// $bedrijven['intro_image'] = $image_array['intro_image'];
// $bedrijvenarray1[] = $bedrijven;
$updatetable = "
UPDATE snm_content
SET requested = 1, lat = '".$lat."', lng = '".$lng."'";
$updatetablecon = $conn->query($updatetable);
// echo $updatetable;
}else if($existcheck['requested'] == 1){
}
$bedrijfimage = $bedrijven['images'];
$bedrijfimg = json_decode($bedrijfimage);
if($bedrijfimg->image_intro != ''){
$bedrijvenimage = '../cms/'.$bedrijfimg->image_intro;
}else{
$bedrijvenimage = '../images/logo_ovn.png';
}
$image_array = array('intro_image'=>''.$bedrijvenimage.'');
}
$jsonobject = json_encode($bedrijvenarray1);
?>
$bedrijven = "
SELECT
cnt.id, cnt.title, cnt.introtext, cnt.ordering, cnt.images, cnt.alias, cnt.state, f.item_id,
MAX(CASE WHEN f.field_id = 3 THEN f.value END) AS plaats,
MAX(CASE WHEN f.field_id = 1 THEN f.value END) AS straat
FROM snm_fields_values f
JOIN snm_content cnt
ON cnt.id = f.item_id
WHERE cnt.state = 1
GROUP BY f.item_id
ORDER BY f.item_id, plaats, straat";
$bedrijvencon = $conn->query($bedrijven);
$bedrijvenarray = [];
while($bedrijven = $bedrijvencon->fetch_assoc()){
$straatnaam = '';
$plaatsnaam = '';
// Stop $bedrijven in een array
array_push($bedrijvenarray, $bedrijven);
// Vervang de straatnaam spaties met plusjes voor de filegetcontents url
$straatnaam .= str_replace(' ', '+', $bedrijven['straat']);
$plaatsnaam .= $bedrijven['plaats'];
// Kijk of er al een plaatsnaam en straatnaam in de database bestaan bij het artikel
$existcheck = "
DESC snm_content";
$existcheckcon = $conn->query($existcheck);
$existcheck = $existcheckcon->fetch_assoc();
if($existcheck['requested'] == 0){
$getlatlong = file_get_contents("https://maps.googleapis.com/maps/api/geocode/json?address=".$bedrijven['plaats'].",".$straatnaam."&key=mijnapikey");
$latlongarray = json_decode($getlatlong);
$lat = '';
$lng = '';
// Leeg de latlong na elke loop
foreach ($latlongarray->results as $key => $latlong){
// $latlonglijst .= $latlong->geometry->location->lat.' ';
// $latlonglijst .= $latlong->geometry->location->lng.'<br>';
$lat .= $latlong->geometry->location->lat;
$lng .= $latlong->geometry->location->lng;
// array_push($bedrijvenarray, $lat, $lng);
//$new_array = array('lat'=>''.$lat.'', 'lng'=>''.$lng.'');
}
// Voeg lat en lng toe aan de $bedrijven array
// $bedrijven['lat'] = $new_array['lat'];
// $bedrijven['lng'] = $new_array['lng'];
// $bedrijven['intro_image'] = $image_array['intro_image'];
// $bedrijvenarray1[] = $bedrijven;
$updatetable = "
UPDATE snm_content
SET requested = 1, lat = '".$lat."', lng = '".$lng."'";
$updatetablecon = $conn->query($updatetable);
// echo $updatetable;
}else if($existcheck['requested'] == 1){
}
$bedrijfimage = $bedrijven['images'];
$bedrijfimg = json_decode($bedrijfimage);
if($bedrijfimg->image_intro != ''){
$bedrijvenimage = '../cms/'.$bedrijfimg->image_intro;
}else{
$bedrijvenimage = '../images/logo_ovn.png';
}
$image_array = array('intro_image'=>''.$bedrijvenimage.'');
}
$jsonobject = json_encode($bedrijvenarray1);
?>
Een hoop is niet relevant omdat ik het eerst dus op die manier deed dat hij binnen no time aan zijn limiet kwam (altijd voor alle items een request uitvoeren en dit direct in een array stoppen).
Gewijzigd op 31/10/2017 13:58:43 door Snelle Jaap
Het eerste opvallende probleem is dat je UPDATE geen WHERE bevat, waardoor altijd de hele tabel geupdatet zal worden met de waarde die binnen de loop bekend is. Dat lijkt me niet de bedoeling.
Ben van Velzen op 31/10/2017 14:16:05:
Het eerste opvallende probleem is dat je UPDATE geen WHERE bevat, waardoor altijd de hele tabel geupdatet zal worden met de waarde die binnen de loop bekend is. Dat lijkt me niet de bedoeling.
Jawel, ik wil dat bij alle rijen de coordinaten worden toegevoegd. Alleen wordt nu overal dezelfde waarde toegevoegd terwijl elke rij natuurlijk een uniek coordinaat heeft.
Wat momenteel gaat opleveren dat je per gevonden record een UPDATE draait met een FULL TABLE LOCK tot gevolg. Dat gaat nooit snel worden.
Ben van Velzen op 31/10/2017 14:21:47:
Wat momenteel gaat opleveren dat je per gevonden record een UPDATE draait met een FULL TABLE LOCK tot gevolg. Dat gaat nooit snel worden.
Wat zou hier een oplossing voor zijn? Ik zal vast niet de enige zijn die iets op deze manier wil doen.
Ben van Velzen op 31/10/2017 14:16:05:
Het eerste opvallende probleem is dat je UPDATE geen WHERE bevat, waardoor altijd de hele tabel geupdatet zal worden met de waarde die binnen de loop bekend is. Dat lijkt me niet de bedoeling.
(oeps, was nog een tweede loop ;-) )
Gewijzigd op 31/10/2017 14:31:44 door Willem vp
- Waarom zit er in je "UPDATE snm_content ..." geen WHERE? / Waarom heb je dan meerdere rijen
- Is die snm_content.id wel uniek, of ... ?
- Wat doet die $existcheck query (zoals ik het nu zie kan die alleen maar een foutmelding geven).
- Dat $bedrijfimage is nog een stukje "work in progress"?
- $bedrijvenarray1 wordt nergens gevuld (code staat in commentaar) / lekker verwarrend met $bedrijvenarray (zonder 1) ook weer ...
Rob Doemaarwat op 31/10/2017 15:57:17:
Zoveel vragen ...
- Waarom zit er in je "UPDATE snm_content ..." geen WHERE? / Waarom heb je dan meerdere rijen
- Is die snm_content.id wel uniek, of ... ?
- Wat doet die $existcheck query (zoals ik het nu zie kan die alleen maar een foutmelding geven).
- Dat $bedrijfimage is nog een stukje "work in progress"?
- $bedrijvenarray1 wordt nergens gevuld (code staat in commentaar) / lekker verwarrend met $bedrijvenarray (zonder 1) ook weer ...
- Waarom zit er in je "UPDATE snm_content ..." geen WHERE? / Waarom heb je dan meerdere rijen
- Is die snm_content.id wel uniek, of ... ?
- Wat doet die $existcheck query (zoals ik het nu zie kan die alleen maar een foutmelding geven).
- Dat $bedrijfimage is nog een stukje "work in progress"?
- $bedrijvenarray1 wordt nergens gevuld (code staat in commentaar) / lekker verwarrend met $bedrijvenarray (zonder 1) ook weer ...
Ja het is nogal rommelig klopt. De $existcheck query is inderdaad overbodig, die data kan ik al met de 1e query ophalen. Ik heb het al werkend gekregen trouwens en de site is ook weer een stuk sneller.
Toevoeging op 31/10/2017 16:02:50:
Rob Doemaarwat op 31/10/2017 15:57:17:
Zoveel vragen ...
- Waarom zit er in je "UPDATE snm_content ..." geen WHERE? / Waarom heb je dan meerdere rijen
- Is die snm_content.id wel uniek, of ... ?
- Wat doet die $existcheck query (zoals ik het nu zie kan die alleen maar een foutmelding geven).
- Dat $bedrijfimage is nog een stukje "work in progress"?
- $bedrijvenarray1 wordt nergens gevuld (code staat in commentaar) / lekker verwarrend met $bedrijvenarray (zonder 1) ook weer ...
- Waarom zit er in je "UPDATE snm_content ..." geen WHERE? / Waarom heb je dan meerdere rijen
- Is die snm_content.id wel uniek, of ... ?
- Wat doet die $existcheck query (zoals ik het nu zie kan die alleen maar een foutmelding geven).
- Dat $bedrijfimage is nog een stukje "work in progress"?
- $bedrijvenarray1 wordt nergens gevuld (code staat in commentaar) / lekker verwarrend met $bedrijvenarray (zonder 1) ook weer ...
Ja het is nogal rommelig klopt. De $existcheck query is inderdaad overbodig, die data kan ik al met de 1e query ophalen. Ik heb het al werkend gekregen trouwens en de site is ook weer een stuk sneller.