Data groeperen
Ik heb al even een probleem waar ik maar niet uit kom; ik gebruik een script van voetbalripper om wedstrijdschema's op te halen. Deze gegevens zijn voor de komende twee of drie weken. Ik wil deze per datum groeperen in aparte tabellen.
nu is de output dus:
21 nov team 1 - team 2
21 nov team 4 - team 3
28 nov team 5 - team 6
en ik wil graag naar
21 nov
team 1 - team 2
team 4 - team 3
28 nov
team 5 - team 6
Ik weet wel iets van php maar niet zo diepgaand dat ik dit pasklaar kan fixen :/.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
<?php
// Haal unieke datums op
$SQLGetDate = "SELECT DISTINCT datum FROM wedstrijden";
$SQLResultDate = $conn->query($SQLGetDate);
// Sla datums op in array
while ($row = mysqli_fetch_array($SQLResultDate)) {
$datums[] = $row["datum"];
}
?>
// Haal unieke datums op
$SQLGetDate = "SELECT DISTINCT datum FROM wedstrijden";
$SQLResultDate = $conn->query($SQLGetDate);
// Sla datums op in array
while ($row = mysqli_fetch_array($SQLResultDate)) {
$datums[] = $row["datum"];
}
?>
Vervolgens haal ik de voetbalwedstrijden op per datum
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Gewijzigd op 23/11/2015 10:53:16 door Danny von Gaal
Let wel dat je nu dus 1 query voor de datums nodig hebt en daarna per datum een query uitvoert.
Doe je de ordening in php, dan is het maar 1 query.
Afhankelijk van je netwerk setup en drukte op de site, kan dat schelen in de snelheid.
Ivo P op 23/11/2015 10:43:36:
ik zou nog een order by toevoegen aan de eerste query.
Het is natuurlijk een voorbeeld en moet worden aangepast naar de exacte omgeving. Je zou natuurlijk ook nog een WHERE moeten toevoegen omdat je denk ik alleen datums in de toekomst wilt laten zien.
Genoeg stof tot nadenken, ik ga hier eens mee aan de slag, bedankt zover!
$SQLResultDate = $conn->query($SQLGetDate);
Of je query klopt niet, moet er niet ergens nog het FROM-keyword staan in je query?
Dat levert geen non-object melding op. Dat gebeurt hooguit als je een non-object probeert te benaderen als object, zoals de melding aangeeft, bijvoorbeeld omdat in dit geval $conn geen mysqli resource is.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php @mysql_select_db($database) or die( "Unable to select database");
// $sql="SELECT naam, sportpark FROM clubs WHERE naam LIKE '%" . $name . "%'";
// $sql="SELECT naam FROM clubs WHERE naam LIKE '%" . $name . "%' OR sportpark LIKE '%" . $name ."%'";
//-run the query against the mysql query function
// Haal unieke datums op
$SQLGetDate = "SELECT DISTINCT datum FROM `".$dbprefix."clubprogramma`";
$SQLResultDate = $conn->query($SQLGetDate);
// Sla datums op in array
while ($row = mysqli_fetch_array($SQLResultDate)) {
$datums[] = $row["datum"];
}
?>
// $sql="SELECT naam, sportpark FROM clubs WHERE naam LIKE '%" . $name . "%'";
// $sql="SELECT naam FROM clubs WHERE naam LIKE '%" . $name . "%' OR sportpark LIKE '%" . $name ."%'";
//-run the query against the mysql query function
// Haal unieke datums op
$SQLGetDate = "SELECT DISTINCT datum FROM `".$dbprefix."clubprogramma`";
$SQLResultDate = $conn->query($SQLGetDate);
// Sla datums op in array
while ($row = mysqli_fetch_array($SQLResultDate)) {
$datums[] = $row["datum"];
}
?>
Code (php)
Gewijzigd op 27/11/2015 14:09:29 door Marcel S
En het valt ook niet op dat je mysql en mysqli functies door elkaar aan het gebruiken bent? Laat de code eens zien waar $conn gemaakt wordt.
Je zou ook gewoon kunnen volstaan met één query die alles sorteert op datum. Als je deze wedstrijden op het scherm weergeeft houd je tijdens het doorlopen van de resultaten bij wat de "huidige datum" is.
Indien de datum is veranderd ten opzichte van het vorige opgehaalde record maak je een kopje met een nieuwe datum, anders doe je niets. In beide gevallen geef je uiteraard de wedstrijd weer. Dit kan met het introduceren van een enkele hulpvariabele ($huidigeDatum) en het uitvoeren van een simpele check middels een if-statement in elke stap van de loop.
Hiermee heb je effectief het probleem deels verplaatst naar PHP, en dat scheelt je een hoop queries.
Thomas van den Heuvel op 27/11/2015 15:13:50:
Queries in een loop... Dat is meestal een indicatie dat er iets niet geoptimaliseerd is.
Je zou ook gewoon kunnen volstaan met één query die alles sorteert op datum. Als je deze wedstrijden op het scherm weergeeft houd je tijdens het doorlopen van de resultaten bij wat de "huidige datum" is.
Indien de datum is veranderd ten opzichte van het vorige opgehaalde record maak je een kopje met een nieuwe datum, anders doe je niets. In beide gevallen geef je uiteraard de wedstrijd weer. Dit kan met het introduceren van een enkele hulpvariabele ($huidigeDatum) en het uitvoeren van een simpele check middels een if-statement in elke stap van de loop.
Hiermee heb je effectief het probleem deels verplaatst naar PHP, en dat scheelt je een hoop queries.
Je zou ook gewoon kunnen volstaan met één query die alles sorteert op datum. Als je deze wedstrijden op het scherm weergeeft houd je tijdens het doorlopen van de resultaten bij wat de "huidige datum" is.
Indien de datum is veranderd ten opzichte van het vorige opgehaalde record maak je een kopje met een nieuwe datum, anders doe je niets. In beide gevallen geef je uiteraard de wedstrijd weer. Dit kan met het introduceren van een enkele hulpvariabele ($huidigeDatum) en het uitvoeren van een simpele check middels een if-statement in elke stap van de loop.
Hiermee heb je effectief het probleem deels verplaatst naar PHP, en dat scheelt je een hoop queries.