[mysql] Query's + Array's samen mbv Join
Hey Mensen,
Ik maak er een puinhoop van, maar tot nu werkt 't wel.
Alleen nou ik verder wil, loop ik een beetje vast en wordt 't erg ingewikkeld allemaal omdat ik nou meerdere query's en array's heb.
Volgens mij moet ik meer met Join werken, en daar is nou net een tut over, maar snap nog niet goed hoe ik dat hier moet toepassen.
Zou iemand me willen en kunnen helpen?
Edit:
Comments toegevoegd. Hopelijk wat duidelijker.
Wat het doet:
Gegevens ophalen uit, leden, leden_afwezig, spelers, speeldatums, tegenstanders.
Daarna kijken welke spelers afwezig zijn (of leden sid in leden_afwezig voorkomt)
Controleren of speler al is geselecteerd en dus checkbox checked.
Nou wil ik random 4 spelers weergeven die niet afwezig zijn, en dat lukt dus nou niet meer omdat 't zo'n puinhoop is ;-)
edit: titel aangepast, misschien wat duidelijker.
Ik maak er een puinhoop van, maar tot nu werkt 't wel.
Alleen nou ik verder wil, loop ik een beetje vast en wordt 't erg ingewikkeld allemaal omdat ik nou meerdere query's en array's heb.
Volgens mij moet ik meer met Join werken, en daar is nou net een tut over, maar snap nog niet goed hoe ik dat hier moet toepassen.
Zou iemand me willen en kunnen helpen?
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<?php
$dagen = array("","Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag","Zaterdag");
// Array aanmaken voor het controleren of speler afwezig is of niet.
$sqlL = "SELECT lid,naam FROM leden WHERE id = ".$_SESSION['id'];
$resL = mysql_query($sqlL) or die (mysql_error());
while($rijL = mysql_fetch_assoc($resL))
{
$ledenarray[$rijL['lid']] = array();
// Gegevens van leden ophalen en de id's in een array zetten.
$sqlA = "SELECT lid,id,wanneer
FROM leden_afwezig
WHERE lid = ".$rijL['lid'];
$resA = mysql_query($sqlA) or die (mysql_error());
while($rijA = mysql_fetch_assoc($resA))
{
$ledenarray[$rijL['lid']][] = $rijA['wanneer'];
// ophalen wanneer je spelers afwezig zijn, en toevoegen aan zelfde array
}
$sqlS = "SELECT sid,lid
FROM spelers
WHERE lid = ".$rijL['lid'];
$resS = mysql_query($sqlS) or die (mysql_error());
while($rijS = mysql_fetch_assoc($resS))
{
$spelersarray[$rijS['sid']][] = $rijS['lid'];
// Array aanmeken met id uit spelers en id uit leden.
}
}
$sqlS = "SELECT sid,tid,uit,datum,DAYOFWEEK(datum) as dag,
CONCAT(
(CASE DATE_FORMAT(datum, '%w')
WHEN '0' THEN 'zo'
WHEN '1' THEN 'ma'
WHEN '2' THEN 'di'
WHEN '3' THEN 'wo'
WHEN '4' THEN 'do'
WHEN '5' THEN 'vr'
WHEN '6' THEN 'za'
END),
' ',
(DATE_FORMAT(datum, '%e')),
' ',
(CASE DATE_FORMAT(datum, '%c')
WHEN '1' THEN 'januari'
WHEN '2' THEN 'februari'
WHEN '3' THEN 'maart'
WHEN '4' THEN 'april'
WHEN '5' THEN 'mei'
WHEN '6' THEN 'juni'
WHEN '7' THEN 'juli'
WHEN '8' THEN 'augustus'
WHEN '9' THEN 'september'
WHEN '10' THEN 'oktober'
WHEN '11' THEN 'november'
WHEN '12' THEN 'december'
END),
' ',
(DATE_FORMAT(datum, '%Y'))
) AS datumNL
FROM speeldatums
WHERE id = ".$_SESSION['id'];
$resS = mysql_query($sqlS) or die (mysql_error());
$clear=0;
while($rijS = mysql_fetch_assoc($resS))
{
//Gegevens ophalen uit speeldatums
$sqlT = "SELECT tid,tegenstander FROM tegenstanders WHERE tid = ".$rijS['tid'];
$resT = mysql_query($sqlT) or die (mysql_error());
while($rijT = mysql_fetch_assoc($resT))
{
//Gegevens ophalen uit tegenstanders
echo '<div id="left" style="width:300px;">'.PHP_EOL;
echo '<p>Wie: '.inkorten($rijT['tegenstander'],'25').'<br>'.PHP_EOL;
echo 'Waar: '; if($rijS['uit']) $thuisuit = 'Uit'; else $thuisuit = 'Thuis'; echo $thuisuit.'<br>'.PHP_EOL;
echo 'Wanneer: '.$rijS['datumNL'].'</p>'.PHP_EOL;
// gegevens weergeven.
echo '<p>Beschikbare spelers:'.PHP_EOL;
foreach ($ledenarray as $key1=>$value1)
{
if(isset($ledenarray[$key1])
&& !in_array($dagen[$rijS['dag']], $ledenarray[$key1])
&& !in_array($rijS['datum'], $ledenarray[$key1])
&& !in_array($thuisuit,$ledenarray[$key1])
)
// Alleen spelers die niet afwezig zijn
{
$sqlL = "SELECT lid,naam FROM leden WHERE lid = ".$key1;
$resL = mysql_query($sqlL) or die (mysql_error());
$rijL = mysql_fetch_assoc($resL);
echo '<br><input type="checkbox" name="spelers['.$rijS['sid'].'][]" value="'.$key1.'"';
if(isset($spelersarray[$rijS['sid']]) && in_array($rijL['lid'],$spelersarray[$rijS['sid']]))
echo ' checked="checked"';
//Controleren of deze speler al is geselecteerd/in db spelers staat.
echo ' class="checkbox">'.inkorten($rijL['naam'],'15');
}
}
echo '</p>'.PHP_EOL;
echo '</div>'.PHP_EOL;
$clear++;
if($clear==2) { echo '<div id="clear"></div>'; $clear=0; }
}
}
?>
$dagen = array("","Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag","Zaterdag");
// Array aanmaken voor het controleren of speler afwezig is of niet.
$sqlL = "SELECT lid,naam FROM leden WHERE id = ".$_SESSION['id'];
$resL = mysql_query($sqlL) or die (mysql_error());
while($rijL = mysql_fetch_assoc($resL))
{
$ledenarray[$rijL['lid']] = array();
// Gegevens van leden ophalen en de id's in een array zetten.
$sqlA = "SELECT lid,id,wanneer
FROM leden_afwezig
WHERE lid = ".$rijL['lid'];
$resA = mysql_query($sqlA) or die (mysql_error());
while($rijA = mysql_fetch_assoc($resA))
{
$ledenarray[$rijL['lid']][] = $rijA['wanneer'];
// ophalen wanneer je spelers afwezig zijn, en toevoegen aan zelfde array
}
$sqlS = "SELECT sid,lid
FROM spelers
WHERE lid = ".$rijL['lid'];
$resS = mysql_query($sqlS) or die (mysql_error());
while($rijS = mysql_fetch_assoc($resS))
{
$spelersarray[$rijS['sid']][] = $rijS['lid'];
// Array aanmeken met id uit spelers en id uit leden.
}
}
$sqlS = "SELECT sid,tid,uit,datum,DAYOFWEEK(datum) as dag,
CONCAT(
(CASE DATE_FORMAT(datum, '%w')
WHEN '0' THEN 'zo'
WHEN '1' THEN 'ma'
WHEN '2' THEN 'di'
WHEN '3' THEN 'wo'
WHEN '4' THEN 'do'
WHEN '5' THEN 'vr'
WHEN '6' THEN 'za'
END),
' ',
(DATE_FORMAT(datum, '%e')),
' ',
(CASE DATE_FORMAT(datum, '%c')
WHEN '1' THEN 'januari'
WHEN '2' THEN 'februari'
WHEN '3' THEN 'maart'
WHEN '4' THEN 'april'
WHEN '5' THEN 'mei'
WHEN '6' THEN 'juni'
WHEN '7' THEN 'juli'
WHEN '8' THEN 'augustus'
WHEN '9' THEN 'september'
WHEN '10' THEN 'oktober'
WHEN '11' THEN 'november'
WHEN '12' THEN 'december'
END),
' ',
(DATE_FORMAT(datum, '%Y'))
) AS datumNL
FROM speeldatums
WHERE id = ".$_SESSION['id'];
$resS = mysql_query($sqlS) or die (mysql_error());
$clear=0;
while($rijS = mysql_fetch_assoc($resS))
{
//Gegevens ophalen uit speeldatums
$sqlT = "SELECT tid,tegenstander FROM tegenstanders WHERE tid = ".$rijS['tid'];
$resT = mysql_query($sqlT) or die (mysql_error());
while($rijT = mysql_fetch_assoc($resT))
{
//Gegevens ophalen uit tegenstanders
echo '<div id="left" style="width:300px;">'.PHP_EOL;
echo '<p>Wie: '.inkorten($rijT['tegenstander'],'25').'<br>'.PHP_EOL;
echo 'Waar: '; if($rijS['uit']) $thuisuit = 'Uit'; else $thuisuit = 'Thuis'; echo $thuisuit.'<br>'.PHP_EOL;
echo 'Wanneer: '.$rijS['datumNL'].'</p>'.PHP_EOL;
// gegevens weergeven.
echo '<p>Beschikbare spelers:'.PHP_EOL;
foreach ($ledenarray as $key1=>$value1)
{
if(isset($ledenarray[$key1])
&& !in_array($dagen[$rijS['dag']], $ledenarray[$key1])
&& !in_array($rijS['datum'], $ledenarray[$key1])
&& !in_array($thuisuit,$ledenarray[$key1])
)
// Alleen spelers die niet afwezig zijn
{
$sqlL = "SELECT lid,naam FROM leden WHERE lid = ".$key1;
$resL = mysql_query($sqlL) or die (mysql_error());
$rijL = mysql_fetch_assoc($resL);
echo '<br><input type="checkbox" name="spelers['.$rijS['sid'].'][]" value="'.$key1.'"';
if(isset($spelersarray[$rijS['sid']]) && in_array($rijL['lid'],$spelersarray[$rijS['sid']]))
echo ' checked="checked"';
//Controleren of deze speler al is geselecteerd/in db spelers staat.
echo ' class="checkbox">'.inkorten($rijL['naam'],'15');
}
}
echo '</p>'.PHP_EOL;
echo '</div>'.PHP_EOL;
$clear++;
if($clear==2) { echo '<div id="clear"></div>'; $clear=0; }
}
}
?>
Edit:
Comments toegevoegd. Hopelijk wat duidelijker.
Wat het doet:
Gegevens ophalen uit, leden, leden_afwezig, spelers, speeldatums, tegenstanders.
Daarna kijken welke spelers afwezig zijn (of leden sid in leden_afwezig voorkomt)
Controleren of speler al is geselecteerd en dus checkbox checked.
Nou wil ik random 4 spelers weergeven die niet afwezig zijn, en dat lukt dus nou niet meer omdat 't zo'n puinhoop is ;-)
edit: titel aangepast, misschien wat duidelijker.
Gewijzigd op 01/01/1970 01:00:00 door Michael -
Gesponsorde koppelingen:
@Turmin
Volgens mij is het handiger helpen als je precies uitlegt wat je wilt en daarbij de verschillende tabellen ook even toelichten.
Op deze manier moeten wij zelf gaan bepalen wat je waarmee wilt bereiken, terwijl het gemakkelijker is als je uitlegt wat je wilt.
Volgens mij is het handiger helpen als je precies uitlegt wat je wilt en daarbij de verschillende tabellen ook even toelichten.
Op deze manier moeten wij zelf gaan bepalen wat je waarmee wilt bereiken, terwijl het gemakkelijker is als je uitlegt wat je wilt.
@Robert: Bericht gewijzigd en comments en wat meer info toegevoegd.
Tabellen:
team
- id (auto_increment, int)
- team (varchar 255)
leden:
- lid (auto_increment, int)
- id (int)
- naam (varchar 255)
leden_afwezig:
- lid (int)
- id (int)
- wanneer (varchar 255)
tegenstanders:
- tid (auto_increment, int)
- id (int)
- tegenstander (varchar 255)
speeldatums:
- sid (auto_increment, int)
- id (int)
- tid (int)
- uit (standaard 0, tinyint)
- datum (date)
spelers:
- id (int)
- sid (int)
- lid (int)
Tabellen:
team
- id (auto_increment, int)
- team (varchar 255)
leden:
- lid (auto_increment, int)
- id (int)
- naam (varchar 255)
leden_afwezig:
- lid (int)
- id (int)
- wanneer (varchar 255)
tegenstanders:
- tid (auto_increment, int)
- id (int)
- tegenstander (varchar 255)
speeldatums:
- sid (auto_increment, int)
- id (int)
- tid (int)
- uit (standaard 0, tinyint)
- datum (date)
spelers:
- id (int)
- sid (int)
- lid (int)
Gewijzigd op 01/01/1970 01:00:00 door Michael -
En wat wil je precies bereiken? Als ik het goed heb wil je:
a) kijken welke spelers er op welke datum niet zijn
b) de spelers die er wel zijn weergeven bij een wedstrijd op een bepaalde datum?
a) kijken welke spelers er op welke datum niet zijn
b) de spelers die er wel zijn weergeven bij een wedstrijd op een bepaalde datum?
Robert_Deiman schreef op 06.10.2009 12:20:
En wat wil je precies bereiken? Als ik het goed heb wil je:
a) kijken welke spelers er op welke datum niet zijn
b) de spelers die er wel zijn weergeven bij een wedstrijd op een bepaalde datum?
a) kijken welke spelers er op welke datum niet zijn
b) de spelers die er wel zijn weergeven bij een wedstrijd op een bepaalde datum?
Klopt. Had dit ook al zo ongeveer bij een edit bij de begin post gezet.
En zo'n kleine handeling in meer dan 100 regels :-$
Edit: Er wordt trouwens niet alleen gekeken welke datum een speler niet kan, maar ook of ze elke maandag,dinsdag,woensdag,donderdag,vrijdag,thuis of uit niet kunnen. Vandaar die 3 in_array's onder elkaar.
Gewijzigd op 01/01/1970 01:00:00 door Michael -
@Turmin
Ik kijk er misschien overheen, maar hoe geef je dan aan dat ze uit /of thuis niet kunnen?
Ik zie alleen bij een wedstrijd staan of die uit of thuis is, bij "afwezig" zie ik alleen maar dat een speler er niet is, niet of dat voor alle, of alleen uit/thuis wedstrijden is.
Ik kijk er misschien overheen, maar hoe geef je dan aan dat ze uit /of thuis niet kunnen?
Ik zie alleen bij een wedstrijd staan of die uit of thuis is, bij "afwezig" zie ik alleen maar dat een speler er niet is, niet of dat voor alle, of alleen uit/thuis wedstrijden is.
Robert_Deiman schreef op 06.10.2009 12:46:
@Turmin
Ik kijk er misschien overheen, maar hoe geef je dan aan dat ze uit /of thuis niet kunnen?
Ik zie alleen bij een wedstrijd staan of die uit of thuis is, bij "afwezig" zie ik alleen maar dat een speler er niet is, niet of dat voor alle, of alleen uit/thuis wedstrijden is.
Ik kijk er misschien overheen, maar hoe geef je dan aan dat ze uit /of thuis niet kunnen?
Ik zie alleen bij een wedstrijd staan of die uit of thuis is, bij "afwezig" zie ik alleen maar dat een speler er niet is, niet of dat voor alle, of alleen uit/thuis wedstrijden is.
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
if(isset($ledenarray[$key1])
&& !in_array($dagen[$rijS['dag']], $ledenarray[$key1])
//Controleren of speler op een bepaalde dag niet kan
&& !in_array($rijS['datum'], $ledenarray[$key1])
// controleren of een speler op een bepaalde datum niet kan
&& !in_array($thuisuit,$ledenarray[$key1])
// controleren of speler thuis of uit niet kan.
?>
if(isset($ledenarray[$key1])
&& !in_array($dagen[$rijS['dag']], $ledenarray[$key1])
//Controleren of speler op een bepaalde dag niet kan
&& !in_array($rijS['datum'], $ledenarray[$key1])
// controleren of een speler op een bepaalde datum niet kan
&& !in_array($thuisuit,$ledenarray[$key1])
// controleren of speler thuis of uit niet kan.
?>
En die $thuisuit komt hier vandaan:
Jah, ik snap het nu.. ik had hem zelf ook verkeerd begrepen. Ik dacht even dat spelers ook aan konden geven dat ze thuis wel kunnen, maar uit niet op een bepaalde datum. Dat kon ik niet terug vinden, maar dat hoeft dus ook niet. :)
Ik ben ff Xampp opnieuw aan het installeren, dan ga ik er even mee prutsen.
Ik ben ff Xampp opnieuw aan het installeren, dan ga ik er even mee prutsen.
Ze kunnen dus alleen aangeven wanneer ze niet kunnen, dan weet je dus ook wanneer ze wel kunnen ;-)
Dit geven ze aan door checkboxen aan te vinken: Ma tm vr, thuis en uit.
Met daaronder een invoerveld voor de datum en wordt opgeslagen in spelers_afwezig.
Super bedankt! :-) Ben benieuwd in hoeveel regels jij het kan ;-)
Dit geven ze aan door checkboxen aan te vinken: Ma tm vr, thuis en uit.
Met daaronder een invoerveld voor de datum en wordt opgeslagen in spelers_afwezig.
Super bedankt! :-) Ben benieuwd in hoeveel regels jij het kan ;-)
Lol, ik ook... maar ik zit nog wel met een paar grote vraagtekens:
Je hebt een tabel spelers en een tabel leden, wat is het verschil? Daarnaast snap ik een aantal koppelingen die je legt (afgaande op je database structuur) ook niet helemaal.
- Een tabel leden en een tabel spelers? Ik mis daar nog een koppeling in (Is een speler niet automatisch lid, wat heb je precies nodig met de lid gegevens als je de speler gegevens kan ophalen?
- Kan een speler meerdere LID hebben? Zo niet, waarom dan een koppeltabel
- Waarvoor wordt in al die tabellen "id" gebruikt? Die heeft volgens mij niets te betekenen (in de meeste tabellen, zeker niet waar al een kolom met auto_increment wordt gebruikt)
Zo zijn er nog wel meer vraagtekens bij je hele structuur, ik kan er niet echt wijs uit worden hoe je dit allemaal in gedachten had. Misschien als je ook even kan uitleggen hoe die opbouw werkt en verder in elkaar steekt dat ik er wat mee kan. Voor nu zie ik als beste optie, opnieuw de db structuur opbouwen.
Je hebt een tabel spelers en een tabel leden, wat is het verschil? Daarnaast snap ik een aantal koppelingen die je legt (afgaande op je database structuur) ook niet helemaal.
- Een tabel leden en een tabel spelers? Ik mis daar nog een koppeling in (Is een speler niet automatisch lid, wat heb je precies nodig met de lid gegevens als je de speler gegevens kan ophalen?
- Kan een speler meerdere LID hebben? Zo niet, waarom dan een koppeltabel
- Waarvoor wordt in al die tabellen "id" gebruikt? Die heeft volgens mij niets te betekenen (in de meeste tabellen, zeker niet waar al een kolom met auto_increment wordt gebruikt)
Zo zijn er nog wel meer vraagtekens bij je hele structuur, ik kan er niet echt wijs uit worden hoe je dit allemaal in gedachten had. Misschien als je ook even kan uitleggen hoe die opbouw werkt en verder in elkaar steekt dat ik er wat mee kan. Voor nu zie ik als beste optie, opnieuw de db structuur opbouwen.
Het systeem werkt als volgt:
Je kan een schema aanmaken of inloggen in een bestaand schema.
Daarvoor wordt een random key aangemaakt en opgeslagen, samen met een ID die dan weer in een sessie wordt gezegt: $_SESSION['id']
Die wordt steeds weer gebruikt, om het juiste schema op te halen, vandaar dat in meerdere velden id voor komt.
Stap1:
Je kan je teamnaam invullen en je leden en je tegenstanders.
Teamnaam wordt opgeslagen in 'data' samen met de key (als ie al niet was opgeslagen).
Je leden worden opgeslagen in 'leden'
Je tegenstanders worden opgeslagen in 'tegenstanders'
Stap2:
Alle tegenstanders worden getoond en je kunt de datum's invullen wanneer er tegen hun wordt gespeeld en of 't een thuis of uit wedstrijd is.
Dit wordt opgeslagen in 'speeldatums' (en de ID er weer bij)
Stap3:
Alle spelers worden getoond en je kan aangeven wanneer de spelers niet kunnen.
Dit wordt opgeslagen in 'leden_afwezig'
Stap4:
Dat is 't script wat in m'n eerste post staat.
Alle wedstrijden worden getoond en voor elke wedstrijd kun je spelers uit de beschikbare spelers kiezen (dit moet uit eindelijk random gebeuren).
De spelers die zijn gekozen worden opgeslagen in 'spelers'.
Je kan een schema aanmaken of inloggen in een bestaand schema.
Daarvoor wordt een random key aangemaakt en opgeslagen, samen met een ID die dan weer in een sessie wordt gezegt: $_SESSION['id']
Die wordt steeds weer gebruikt, om het juiste schema op te halen, vandaar dat in meerdere velden id voor komt.
Stap1:
Je kan je teamnaam invullen en je leden en je tegenstanders.
Teamnaam wordt opgeslagen in 'data' samen met de key (als ie al niet was opgeslagen).
Je leden worden opgeslagen in 'leden'
Je tegenstanders worden opgeslagen in 'tegenstanders'
Stap2:
Alle tegenstanders worden getoond en je kunt de datum's invullen wanneer er tegen hun wordt gespeeld en of 't een thuis of uit wedstrijd is.
Dit wordt opgeslagen in 'speeldatums' (en de ID er weer bij)
Stap3:
Alle spelers worden getoond en je kan aangeven wanneer de spelers niet kunnen.
Dit wordt opgeslagen in 'leden_afwezig'
Stap4:
Dat is 't script wat in m'n eerste post staat.
Alle wedstrijden worden getoond en voor elke wedstrijd kun je spelers uit de beschikbare spelers kiezen (dit moet uit eindelijk random gebeuren).
De spelers die zijn gekozen worden opgeslagen in 'spelers'.
Bump.
Gewijzigd op 01/01/1970 01:00:00 door Michael -
Kun je je vraag nog een keer stellen met de status van hoe ver je op dit moment bent? Ik denk dat de gemiddelde persoon A. Geen zin heeft om het hele topic tot op dit moment door te werken, B. niet heel wijs wordt als ie het topic door gaat werken.
Het is de bedoeling dat het hele script in de start topic in 1 query, of in ieder geval veel korter, gemaakt wordt. En niet zo rommelig met al die array's en query's. Want 't werkt nu wel, maar als je 't wilt uitbreiden gaat 't dus mis. Ik ben nou bezig om joins te begrijpen en heb de tut van robert al een paar keer gelezen, maar valt toch vies tegen om dat hele script in te korten.
De query van speeldatums en van leden heb ik nu wel samen kunnen voegen.
Dit werkt. Maar nou zit ik nog met 3 array's en 4 query's die hopelijk ook samen kunnen worden gevoegd of in iedergeval korter.
(En dit is nog maar een klein stukje van 't hele script, maar hierna hoop ik 't te begrijpen en de rest zelf te kunnen)
De query van speeldatums en van leden heb ik nu wel samen kunnen voegen.
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
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
<?php
//regel 34 tm 92 van script in start topic in een join
$sqlST = "SELECT
t.tid
,t.tegenstander
,s.sid
,s.tid
,s.uit
,s.datum
,DAYOFWEEK(s.datum) as dag
,CONCAT(
(CASE DATE_FORMAT(s.datum, '%w')
WHEN '0' THEN 'zo'
WHEN '1' THEN 'ma'
WHEN '2' THEN 'di'
WHEN '3' THEN 'wo'
WHEN '4' THEN 'do'
WHEN '5' THEN 'vr'
WHEN '6' THEN 'za'
END),
' ',
(DATE_FORMAT(s.datum, '%e')),
' ',
(CASE DATE_FORMAT(s.datum, '%c')
WHEN '1' THEN 'januari'
WHEN '2' THEN 'februari'
WHEN '3' THEN 'maart'
WHEN '4' THEN 'april'
WHEN '5' THEN 'mei'
WHEN '6' THEN 'juni'
WHEN '7' THEN 'juli'
WHEN '8' THEN 'augustus'
WHEN '9' THEN 'september'
WHEN '10' THEN 'oktober'
WHEN '11' THEN 'november'
WHEN '12' THEN 'december'
END),
' ',
(DATE_FORMAT(s.datum, '%Y'))
) AS datumNL
FROM speeldatums AS s
INNER JOIN tegenstanders AS t
ON s.tid = t.tid
WHERE s.id = ".$_SESSION['id'];
$resST = mysql_query($sqlST);
if (!($resST = mysql_query ($sqlST))) {
trigger_error (mysql_error ());
}
$clear=0;
while($rijST = mysql_fetch_assoc($resST))
{
//Gegevens ophalen uit tegenstanders
echo '<div id="left" style="width:300px;">'.PHP_EOL;
echo '<p>Wie: '.$rijST['tegenstander'].'<br>'.PHP_EOL;
echo 'Waar: '; if($rijST['uit']) $thuisuit = 'Uit'; else $thuisuit = 'Thuis'; echo $thuisuit.'<br>'.PHP_EOL;
echo 'Wanneer: '.$rijST['datumNL'].'</p>'.PHP_EOL;
// gegevens weergeven.
echo '<p>Beschikbare spelers:'.PHP_EOL;
foreach ($ledenarray as $key1=>$value1)
{
if(isset($ledenarray[$key1])
&& !in_array($dagen[$rijST['dag']], $ledenarray[$key1])
&& !in_array($rijST['datum'], $ledenarray[$key1])
&& !in_array($thuisuit,$ledenarray[$key1])
)
?>
//regel 34 tm 92 van script in start topic in een join
$sqlST = "SELECT
t.tid
,t.tegenstander
,s.sid
,s.tid
,s.uit
,s.datum
,DAYOFWEEK(s.datum) as dag
,CONCAT(
(CASE DATE_FORMAT(s.datum, '%w')
WHEN '0' THEN 'zo'
WHEN '1' THEN 'ma'
WHEN '2' THEN 'di'
WHEN '3' THEN 'wo'
WHEN '4' THEN 'do'
WHEN '5' THEN 'vr'
WHEN '6' THEN 'za'
END),
' ',
(DATE_FORMAT(s.datum, '%e')),
' ',
(CASE DATE_FORMAT(s.datum, '%c')
WHEN '1' THEN 'januari'
WHEN '2' THEN 'februari'
WHEN '3' THEN 'maart'
WHEN '4' THEN 'april'
WHEN '5' THEN 'mei'
WHEN '6' THEN 'juni'
WHEN '7' THEN 'juli'
WHEN '8' THEN 'augustus'
WHEN '9' THEN 'september'
WHEN '10' THEN 'oktober'
WHEN '11' THEN 'november'
WHEN '12' THEN 'december'
END),
' ',
(DATE_FORMAT(s.datum, '%Y'))
) AS datumNL
FROM speeldatums AS s
INNER JOIN tegenstanders AS t
ON s.tid = t.tid
WHERE s.id = ".$_SESSION['id'];
$resST = mysql_query($sqlST);
if (!($resST = mysql_query ($sqlST))) {
trigger_error (mysql_error ());
}
$clear=0;
while($rijST = mysql_fetch_assoc($resST))
{
//Gegevens ophalen uit tegenstanders
echo '<div id="left" style="width:300px;">'.PHP_EOL;
echo '<p>Wie: '.$rijST['tegenstander'].'<br>'.PHP_EOL;
echo 'Waar: '; if($rijST['uit']) $thuisuit = 'Uit'; else $thuisuit = 'Thuis'; echo $thuisuit.'<br>'.PHP_EOL;
echo 'Wanneer: '.$rijST['datumNL'].'</p>'.PHP_EOL;
// gegevens weergeven.
echo '<p>Beschikbare spelers:'.PHP_EOL;
foreach ($ledenarray as $key1=>$value1)
{
if(isset($ledenarray[$key1])
&& !in_array($dagen[$rijST['dag']], $ledenarray[$key1])
&& !in_array($rijST['datum'], $ledenarray[$key1])
&& !in_array($thuisuit,$ledenarray[$key1])
)
?>
Dit werkt. Maar nou zit ik nog met 3 array's en 4 query's die hopelijk ook samen kunnen worden gevoegd of in iedergeval korter.
(En dit is nog maar een klein stukje van 't hele script, maar hierna hoop ik 't te begrijpen en de rest zelf te kunnen)
Gewijzigd op 01/01/1970 01:00:00 door Michael -
Quote:
Dit zou ik sowieso in PHP doen, omdat het in PHP gewoon een stuk korter kan. Gewoon die verschillende getalletjes binnenhalen of gewoon de timestamp en dit probleem met PHP oplossen.CONCAT(
(CASE DATE_FORMAT(s.datum, '%w')
WHEN '0' THEN 'zo'
WHEN '1' THEN 'ma'
WHEN '2' THEN 'di'
WHEN '3' THEN 'wo'
WHEN '4' THEN 'do'
WHEN '5' THEN 'vr'
WHEN '6' THEN 'za'
END),
' ',
(DATE_FORMAT(s.datum, '%e')),
' ',
(CASE DATE_FORMAT(s.datum, '%c')
WHEN '1' THEN 'januari'
WHEN '2' THEN 'februari'
WHEN '3' THEN 'maart'
WHEN '4' THEN 'april'
WHEN '5' THEN 'mei'
WHEN '6' THEN 'juni'
WHEN '7' THEN 'juli'
WHEN '8' THEN 'augustus'
WHEN '9' THEN 'september'
WHEN '10' THEN 'oktober'
WHEN '11' THEN 'november'
WHEN '12' THEN 'december'
END),
' ',
(DATE_FORMAT(s.datum, '%Y'))
) AS datumNL
(CASE DATE_FORMAT(s.datum, '%w')
WHEN '0' THEN 'zo'
WHEN '1' THEN 'ma'
WHEN '2' THEN 'di'
WHEN '3' THEN 'wo'
WHEN '4' THEN 'do'
WHEN '5' THEN 'vr'
WHEN '6' THEN 'za'
END),
' ',
(DATE_FORMAT(s.datum, '%e')),
' ',
(CASE DATE_FORMAT(s.datum, '%c')
WHEN '1' THEN 'januari'
WHEN '2' THEN 'februari'
WHEN '3' THEN 'maart'
WHEN '4' THEN 'april'
WHEN '5' THEN 'mei'
WHEN '6' THEN 'juni'
WHEN '7' THEN 'juli'
WHEN '8' THEN 'augustus'
WHEN '9' THEN 'september'
WHEN '10' THEN 'oktober'
WHEN '11' THEN 'november'
WHEN '12' THEN 'december'
END),
' ',
(DATE_FORMAT(s.datum, '%Y'))
) AS datumNL
En natuurlijk moet je ook ergens de vraag stellen of iets wel korter moet. Als iets gewoon goed (foutloos, probleemloos en snel) werkt, waarom zou je het dan korter willen hebben?
Die datum laat ik liever gewoon via mysql. Wat mysql kan moet je php niet laten doen zeggen ze altijd.
Ik wil 't korter omdat ik kei veel array's en query's heb en nu vast loop.
En 't kan ook gewoon korter en ik wil dat dus ook leren om meer dingen in 1 query te doen. Ik ben van mening dat er op die paar regels geen 3 array's en 5query's (met nieuwe stukje dan 4) nodig zijn.
Edit: in het totale script heb ik ongeveer 20 query en 18 array's. Ik vind dat dit zeker wel gehalveerd kan worden.
Ik wil 't korter omdat ik kei veel array's en query's heb en nu vast loop.
En 't kan ook gewoon korter en ik wil dat dus ook leren om meer dingen in 1 query te doen. Ik ben van mening dat er op die paar regels geen 3 array's en 5query's (met nieuwe stukje dan 4) nodig zijn.
Edit: in het totale script heb ik ongeveer 20 query en 18 array's. Ik vind dat dit zeker wel gehalveerd kan worden.
Gewijzigd op 01/01/1970 01:00:00 door Michael -
Wil iemand me nog helpen? Hoe kan ik dat met die Array's in een query oplossen?
Niemand die 't weet? Idee? Schop in de goede richting?
4 berichten hiervoor zie ik toch 1 query?
En haal die afschuwelijke datum-opmaak-sql-bende eens weg en pak gewoon strftime() in php!
(althans, is mijn advies).
En haal die afschuwelijke datum-opmaak-sql-bende eens weg en pak gewoon strftime() in php!
(althans, is mijn advies).
Mysql kan dit veel sneller.
Dat is een gedeelte van 't script ja. Daarin zitten nog niet de array's en die andere 4 query's in verwerkt.
Dat is een gedeelte van 't script ja. Daarin zitten nog niet de array's en die andere 4 query's in verwerkt.



