Data groeperen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Marcel S

Marcel S

21/11/2015 20:26:59
Quote Anchor link
Hallo fanaten ;),

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 :/.
 
PHP hulp

PHP hulp

22/12/2024 11:18:32
 
Ivo P

Ivo P

21/11/2015 21:14:52
 
Danny von Gaal

Danny von Gaal

23/11/2015 10:38:41
Quote Anchor link
Wat ik zou doen is eerst de unieke datums ophalen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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"];
    
}


?>


Vervolgens haal ik de voetbalwedstrijden op per datum

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
<?php
foreach ($datums as $datum) {

    $SQLGetWedstrijden = "SELECT id, tegenstander, datum, score
                      FROM wedstrijden
                      WHERE datum='"
. $datum . "'";
    $SQLResultWedstrijden = $conn->query($SQLGetWedstrijden);

    while($row2 = mysqli_fetch_assoc($SQLResultWedstrijden)) {

        echo $row2['tegenstander'];

    }

}

?>
Gewijzigd op 23/11/2015 10:53:16 door Danny von Gaal
 
Ivo P

Ivo P

23/11/2015 10:43:36
Quote Anchor link
ik zou nog een order by toevoegen aan de eerste query.

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.
 
Danny von Gaal

Danny von Gaal

23/11/2015 10:54:54
Quote Anchor link
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.
 
Marcel S

Marcel S

23/11/2015 13:31:15
Quote Anchor link
Genoeg stof tot nadenken, ik ga hier eens mee aan de slag, bedankt zover!
 
Marcel S

Marcel S

26/11/2015 18:33:06
Quote Anchor link
Ok, blijf steeds de foutmelding Call to a member function query() on a non-object krijgen op
$SQLResultDate = $conn->query($SQLGetDate);
 
Marthijn Buijs

Marthijn Buijs

26/11/2015 19:29:19
Quote Anchor link
Laat eens meer van je code zien?
Of je query klopt niet, moet er niet ergens nog het FROM-keyword staan in je query?
 
Ben van Velzen

Ben van Velzen

26/11/2015 19:43:18
Quote Anchor link
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.
 
Marcel S

Marcel S

27/11/2015 14:06:46
Quote Anchor link
Volgens mij niks geks maar goed ik kom er al even niet uit ook :)
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
<?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"];
    
}


?>
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
<?php
foreach ($datums as $datum) {

    $SQLGetWedstrijden = "SELECT datum, uit, thuis
                      FROM clubs
                      WHERE datum='"
. $datum . "'";
    $SQLResultWedstrijden = $conn->query($SQLGetWedstrijden);

    while($row2 = mysqli_fetch_assoc($SQLResultWedstrijden)) {

        echo $row2['thuis'];

    }

}

?>
Gewijzigd op 27/11/2015 14:09:29 door Marcel S
 
Ben van Velzen

Ben van Velzen

27/11/2015 14:11:03
Quote Anchor link
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.
 
Thomas van den Heuvel

Thomas van den Heuvel

27/11/2015 15:13:50
Quote Anchor link
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.
 
Marcel S

Marcel S

27/11/2015 21:19:55
Quote Anchor link
Dat was in beginsel ook de bedoeling van deze post. En nee, ik had niet in de gaten dat ik MySQL mixed met MySQLi aan het gebruiken was.

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.
 



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.