[php] Selectie van 4 resultaten maken

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben nog steeds bezig met mn communicatie schema voor het bedrijf waarvoor ik werk. Ik wil graag een invulscherm waarin allemala check boxen komen te staan waarin je aan kunt geven of een communicatie is gelukt of niet.

Ik zou dan graag een schema willen hebben waarin je een overzicht krijgt van 4 weken met een viertal klanten erin.

Nu ben ik al een heel eind. Ik kan een schema oproepen per week maar ik wil graag dat ik een schema per 4 wken op kan roepen maar dit krijg ik niet voor elkaar.

Ik laat d.m.v. een soort selecteer pagina een bepaalde periode selecteren maar hoe zorg ik ervoor dat hij alleen de resultaten van bijv. wk 1 t/m 4 ophaal?

Met deze code krijg ik netjes de resultaten van 1 wk
code:
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
echo "
<h1>
"; 
echo "Week "; 
echo $wk;
echo "</h1>
<table border=\"0\">
  <tr>
    <td width=\"75\">Klant</td>
    <td width=\"75\">Maandag</td>
    <td width=\"75\">Dinsdag</td>
    <td width=\"75\">Woensdag</td>
    <td width=\"100\">Donderdag</td>
  </tr></table>";
  
$klwk = "SELECT klant,wk,ma,di,wo,do FROM klantwk WHERE wk = '$wk' ORDER BY wk ASC";
$klwk2 = "SELECT klant,ma,di,wo,do FROM klantwk WHERE wk = '$wk'";
$res = mysql_query ($klwk);
$res2 = mysql_query ($klwk2);  
$tab = mysql_fetch_array($res2);

echo "<table border=\"0\">";

while ($row = mysql_fetch_array($res))
{ 
  echo "<tr>
    <td width=\"75\">$row[klant]</td>
<td width=\"75\">$row[ma]</td> 

etc...

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:44

gorgi_19

Kruimeltjes zijn weer op :9

SQL:
1
SELECT klant,wk,ma,di,wo,do FROM klantwk WHERE wk  BETWEEN 1 AND 4

http://www.w3schools.com/sql/sql_between.asp

[ Voor 21% gewijzigd door gorgi_19 op 19-07-2004 13:01 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ok dat is misschien ene oplossing.

Alleen als ik nu zeg periode 1 (week 1 t/m4) en ik doe iets als dit
code:
1
2
3
4
5
6
7
8
9
if ($periode == '1')
{
$klwk = "SELECT klant,wk,ma,di,wo,do FROM klantwk WHERE wk BETWEEN '1' AND '4'";
$res = mysql_query ($klwk);

while ($row = mysql_fetch_array($res))
{
bla bla
}

dan geeft ie meer dan 10 resultaten terwijl het er maar 8 zijn :?

Acties:
  • 0 Henk 'm!

  • TRON
  • Registratie: September 2001
  • Laatst online: 16-09 13:13
En als je die query uitvoert via phpMyAdmin of via de MySQL-cli?

Leren door te strijden? Dat doe je op CTFSpel.nl. Vraag een gratis proefpakket aan t.w.v. EUR 50 (excl. BTW)


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

offtopic:
Als weken nummer zijn, waarom zet je ze dan tussen quotes?


Welke resultaten zijn teveel? En weet je zeker dat die resultaten niet gewoon in je tabel staan? Die query ziet er niet fout uit...

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heb de query eens in een ander bestand gegooid en nu werkt ie wel.
Zal wel iets met de code te maken hebben.

Nu is krijg ik het volgende resultaat met de while loop die ik nu heb:

vb:

week 37
klant ma di wo do
week 37
klant ma di wo do

week 38
klant ma di wo do
week 38
klant ma di wo do

maar wil graag het volgende:

week 37
klant ma di wo do
klant ma di wo do

week 38
klant ma di wo do
klant ma di wo do

zou graag dus alle resultaten van 1 wk onder elkaar willen hebben.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

code:
1
GROUP BY wk
toevoegen achteraan je query. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ok dat gaat wel beter alleen krijg ik dus nu dat hij als resultaat maar 1 klant geeft terwijl er toch 2 voorkomen binnen de tabel en straks dus nog meer...

ik dacht (misschien wel heel krom maar je weet het niet) misschien werkt het op de volgende manier

code:
1
$klwk = "SELECT klant,wk FROM klantwk WHERE wk BETWEEN '$wk1' AND '$wk2' GROUP BY wk AND klant";

8)7
maar dit mocht ook niet baten. (had ik ook niet verwacht)

[ Voor 6% gewijzigd door Verwijderd op 19-07-2004 14:06 ]


Acties:
  • 0 Henk 'm!

  • johnny7
  • Registratie: November 2000
  • Laatst online: 07-11-2023
In een GROUP BY kan sowieso geen AND voorkomen, wel een ','.
Dus
code:
1
$klwk = "SELECT klant,wk FROM klantwk WHERE wk BETWEEN '$wk1' AND '$wk2' GROUP BY wk, klant";

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
vind het vreemd dat ik maar 1 resultaat krijg.
code:
1
2
3
4
5
6
7
8
9
10
11
$wk1 = 33;
$wk2 = 36;
$klwk = "SELECT klant,wk FROM klantwk WHERE wk BETWEEN '$wk1' AND '$wk2' GROUP BY wk ";
$res = mysql_query ($klwk);

while ($row = mysql_fetch_array($res))
{
bla bla
}

etc.

geeft maar 1 resultaat per week. Dus voor wk 33 krijg ik maar 1 klant te zien terwijl er 3 in de DB zitten...

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
ben iets verder gegaan met t script en heb nu t volgende:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
include ("database.php");
echo "<form name=\"periodeform\" method=\"post\" action=\"$PHP_SELF\">
  <select name=\"periode\">
    <option value=\"1\">Week 1 t/m 4</option>
    <option value=\"5\">Week 5 t/m 8</option>
    <option value=\"9\">Week 9 t/m 12</option>
    <option value=\"13\">Week 13 t/m 16</option>
    <option value=\"17\">Week 17 t/m 20</option>
    <option value=\"21\">Week 21 t/m 24</option>
    bla bla
  </select><br>
  <input name=\"submit\" type=\"submit\" value=\"Ok\">
</form>";
$wk1 = $periode;
$wk2 = $wk1+3;
$klwk = "SELECT * FROM klantwk WHERE wk BETWEEN '$wk1' AND '$wk2' GROUP BY wk";
$res = mysql_query ($klwk);
while ($row = mysql_fetch_array($res))
{ bla bla

hij geeft bij periode 1 en 5 (hiervan zijn geen resultaten) alle tupels uit de tabel.
Terwijl als ik periode 33 selecteer (van deze week zijn er wel resultaten) hij maar 1 klant per week geeft. :?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
iemand?

Modbreak:
Kicken is pas toegestaan na 24 uur. Mensen hebben ook nog andere zaken te doen dan continue op het forum rondhangen, ze zien het topic vanzelf wel. Zie ook de algemene regels (Algemene gedragsregels (Netiquette) #not-done )

[ Voor 130% gewijzigd door gorgi_19 op 19-07-2004 16:04 ]


Acties:
  • 0 Henk 'm!

Verwijderd

dat is niet zo gek... jij zegt: groepeer alles maar met het zelfde weeknr; dat doet en geeft per week 1 record terug... Je zou dus moet soteren op weeknummer en in je applicatie netjes ervoor gaan zorgen dat je je data gepresenteerd gaat worden zoals jij dat wilt.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
excuus voor de ongeduldigheid.

Ik snap het inderdaad nu dat je dus geen group by kunt gebruiken. Maar hoe zou ik die constructie dan in elkaar moeten zetten dat ik dus dit als resultaat krijg?

Week 37
klant ma di wo do
klant ma di wo do

Week 38
klant ma di wo do
klant ma di wo do

Ik heb van alles geprobeerd. Maar ik krijg het niet voor elkaar.

Acties:
  • 0 Henk 'm!

Verwijderd

In elke record die je terug krijgt van de db staat als het goed is het weeknemer. Nu hou je in een variabele dat weeknummer bij. Dan ga je in een loop je recordset doorlopen en bekijk je bij elke record of je weeknummer veranderd is tov van je vorige record. Zo ja: print een nieuwe kop met het weeknummer; zo nee: print gewoon de gegevens van de klant.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
$tmp = -1;
$wk1 = $periode;
$wk2 = $wk1+3;
$klwk = "SELECT * FROM klantwk WHERE wk BETWEEN '$wk1' AND '$wk2'";
$res = mysql_query ($klwk);
while ($row = mysql_fetch_object($res))
{
  if ($tmp != $row->wk) {
    $tmp = $row->wk;
    echo "<b>Week ".$row->wk."</b><br />";
  }
  echo $row->klant." ".$row->ma." "; // enz
}

Niet zo lastig he? :?

[ Voor 23% gewijzigd door NMe op 19-07-2004 16:48 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
toch wel.

Krijg nog steeds maar 1 resultaat per week. Terwijl het er meerdere moeten zijn.

Waarom staat dit stukje code er:

code:
1
$tmp = $row->wk;


Dit doet toch niks :/

[ Voor 35% gewijzigd door Verwijderd op 20-07-2004 10:39 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Hoe ziet je query eruit die je nu gebruikt?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heb de code gebruikt die NMe84 heeft gegeven hierboven.

Maar daar staat een stukje in waarvan ik niet snap wat het doet zie vorige edit...

Hij geeft nog steeds hetzelfde resultaat als ik het stukje eruit haal of erin laat zitten... :'(

Acties:
  • 0 Henk 'm!

Verwijderd

Als je denkt dat die regel niks doet zou ik nog maar eens héél goed naar de code kijken.

Waarom hij niet werkt weet ik zo echter ook niet.

Acties:
  • 0 Henk 'm!

Verwijderd

Dat is een temp variabele die je steeds bijwerkt wanneer het weeknummer verandert ten op zichte van de vorige recordset. Met die variabele bepaal je dus steeds of er een nieuwe kop geprint moeten worden.

Geeft de query als je die bijvoorbeeld in PHPmyAdmin runt wel het juiste aantal records weer?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik ben er uit. :9
Dit is de query die werkt en het juiste resultaat geeft:
code:
1
$klwk = "SELECT * FROM klantwk WHERE wk BETWEEN '$wk1' AND '$wk2' ORDER BY wk";


Hij geeft nu netjes:

Week 37
Klant ma di wo do
Klant ma di wo do
Klant ma di wo do

Week 38
Klant ma di wo do
Klant ma di wo do
Klant ma di wo do

Alleen nu het volgende probleem. Nu geeft ie als ik periode week 1 t/m 4 selecteer alle resultaten tussen week 30 en 39 terwijl hij niks hoort weer te geven omdat er geen resultaten zijn voor deze weken... :'(

[ Voor 27% gewijzigd door Verwijderd op 20-07-2004 11:05 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Hé ORDER BY, waar heb ik dat eerder gehoord ;)

De rest klinkt wel erg vaak van je nieuwe probleem. Van wat voor datatypes zijn je attributen in je tabel? Misschien controleren op iets als WHERE ( (ma IS NOT NULL) AND (di IS NOT NULL)) .... daar zou je als het goed is mee moeten kunnen omzeilen dat je een recordset terug krijgt die alleen een weeknummer bevat en verder geen klant..

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het inderdaad te maken met de datatypen in de tabel. Week stond op varchar en heb ik op int en nu werkt het.

Thnx iedereen... _/-\o_

Kan weer ff verder brouwen met mn script
Pagina: 1