Controle gelijke waarden
Bij het controleren of er een dvd uitgeleend is geeft hij alleen de eerste uitgeleende dvd weer als uitgeleend en de volgende die uitgeleend is geeft hij weer als OK
Iemand enig idee of een opzetje voor mij ?
Iemand enig idee of een opzetje voor mij ?
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
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
<?php
echo '<h1>Overzicht van dvd\'s</h1>'.PHP_EOL;
$sql2 =mysql_query("SELECT dvd_id FROM uitgeleend WHERE datum_terug < datum_weg",$conn);
$data2 = mysql_fetch_array($sql2);
$sql =mysql_query("SELECT id, naam FROM dvd ORDER BY naam ASC",$conn);
if ( mysql_num_rows($sql) >= 1 ) {
$i = 0;
echo '<table border="0">'.PHP_EOL;
while ($data = mysql_fetch_array($sql))
{
$naam = stripslashes( $data['naam'] );
$i++;
echo '<tr>'.PHP_EOL;
echo '<td class="formleft">'.PHP_EOL;
echo $i.')'.PHP_EOL;
echo '</td>'.PHP_EOL;
echo '<td class="formdata">'.PHP_EOL;
echo '<a href="'.dvd.'?p=detail&id='.$data['id'].'" title="Bekijk de details van '.$naam.'" class="formleft">'.$naam.' </a>'.PHP_EOL;
echo '</td>'.PHP_EOL;
echo '<td>'.PHP_EOL;
if ($data['id'] == $data2['dvd_id']) {
echo'<img src="'.coreimg.'bad.jpg" alt="" />'.PHP_EOL;
} else {
echo'<img src="'.coreimg.'good.jpg" alt="" />'.PHP_EOL;
}
echo '</td>'.PHP_EOL;
echo '</tr>'.PHP_EOL;
}
echo '</table>'.PHP_EOL;
} else {
echo 'Er zijn hier geen dvd\'s gevonden.'.PHP_EOL;
}
?>
echo '<h1>Overzicht van dvd\'s</h1>'.PHP_EOL;
$sql2 =mysql_query("SELECT dvd_id FROM uitgeleend WHERE datum_terug < datum_weg",$conn);
$data2 = mysql_fetch_array($sql2);
$sql =mysql_query("SELECT id, naam FROM dvd ORDER BY naam ASC",$conn);
if ( mysql_num_rows($sql) >= 1 ) {
$i = 0;
echo '<table border="0">'.PHP_EOL;
while ($data = mysql_fetch_array($sql))
{
$naam = stripslashes( $data['naam'] );
$i++;
echo '<tr>'.PHP_EOL;
echo '<td class="formleft">'.PHP_EOL;
echo $i.')'.PHP_EOL;
echo '</td>'.PHP_EOL;
echo '<td class="formdata">'.PHP_EOL;
echo '<a href="'.dvd.'?p=detail&id='.$data['id'].'" title="Bekijk de details van '.$naam.'" class="formleft">'.$naam.' </a>'.PHP_EOL;
echo '</td>'.PHP_EOL;
echo '<td>'.PHP_EOL;
if ($data['id'] == $data2['dvd_id']) {
echo'<img src="'.coreimg.'bad.jpg" alt="" />'.PHP_EOL;
} else {
echo'<img src="'.coreimg.'good.jpg" alt="" />'.PHP_EOL;
}
echo '</td>'.PHP_EOL;
echo '</tr>'.PHP_EOL;
}
echo '</table>'.PHP_EOL;
} else {
echo 'Er zijn hier geen dvd\'s gevonden.'.PHP_EOL;
}
?>
Je doet dit:
dus je haalt maar 1 record op. Wat je nodig hebt, is alle records die aan je query voldoen.
dus je haalt maar 1 record op. Wat je nodig hebt, is alle records die aan je query voldoen.
Edit:
Als je datamodel goed is, zou het ook in 1 query moeten kunnen. Wat is de structuur van je tabellen?
Als je datamodel goed is, zou het ook in 1 query moeten kunnen. Wat is de structuur van je tabellen?
Gewijzigd op 01/01/1970 01:00:00 door Jan Koehoorn
SQL dump
Edit:
Alle gegevens in 1 query ophalen is geen probleem het probleem zit er bij in dat alle dvd.id opgehaald worden voor de lijst maar dat hij bij de uitgeleende dvd_id een ander icoontje moet zetten.
Mischien een handig weetje alleen de uitleen datum word ingevuld de retour datum bijft op 0 staan totdat hij terug is gebracht
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
113
114
115
116
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
113
114
115
116
--
CREATE TABLE `acteurs` (
`id` smallint(4) unsigned NOT NULL auto_increment,
`voornaam` varchar(40) NOT NULL default '',
`achternaam` varchar(40) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
--
CREATE TABLE `dvd` (
`id` smallint(3) unsigned NOT NULL auto_increment,
`naam` varchar(120) NOT NULL default '',
`foto` varchar(40) NOT NULL default '',
`omschrijving` text NOT NULL,
`regisseur_id` smallint(3) unsigned NOT NULL default '0',
`speelduur` smallint(3) unsigned NOT NULL default '0',
`jaar` year(4) NOT NULL default '0000',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
--
CREATE TABLE `dvd_acteurs` (
`id` smallint(4) unsigned NOT NULL auto_increment,
`dvd_id` smallint(3) unsigned NOT NULL default '0',
`acteur_id` smallint(3) unsigned NOT NULL default '0',
`personagenaam` varchar(40) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
--
CREATE TABLE `dvd_genres` (
`id` smallint(4) unsigned NOT NULL auto_increment,
`dvd_id` smallint(3) unsigned NOT NULL default '0',
`genre_id` smallint(3) unsigned NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
--
CREATE TABLE `genres` (
`id` smallint(2) unsigned NOT NULL auto_increment,
`genre` varchar(25) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=21 ;
--
-- Gegevens worden uitgevoerd voor tabel `genres`
--
INSERT INTO `genres` VALUES (1, 'actie');
INSERT INTO `genres` VALUES (2, 'avontuur');
INSERT INTO `genres` VALUES (3, 'biografie');
INSERT INTO `genres` VALUES (4, 'documentaire');
INSERT INTO `genres` VALUES (5, 'drama');
INSERT INTO `genres` VALUES (6, 'familie');
INSERT INTO `genres` VALUES (7, 'fantasie');
INSERT INTO `genres` VALUES (8, 'geschiedenis');
INSERT INTO `genres` VALUES (9, 'horror');
INSERT INTO `genres` VALUES (10, 'komedie');
INSERT INTO `genres` VALUES (11, 'kortfilms');
INSERT INTO `genres` VALUES (12, 'misdaad');
INSERT INTO `genres` VALUES (13, 'muziek');
INSERT INTO `genres` VALUES (14, 'oorlog');
INSERT INTO `genres` VALUES (15, 'romantiek');
INSERT INTO `genres` VALUES (16, 'science fiction');
INSERT INTO `genres` VALUES (17, 'sport');
INSERT INTO `genres` VALUES (18, 'tekenfilm');
INSERT INTO `genres` VALUES (19, 'thriller');
INSERT INTO `genres` VALUES (20, 'western');
-- --------------------------------------------------------
--
-- Tabel structuur voor tabel `leners`
--
CREATE TABLE `leners` (
`id` smallint(3) unsigned NOT NULL auto_increment,
`voornaam` varchar(40) NOT NULL default '',
`achternaam` varchar(40) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
--
CREATE TABLE `regisseurs` (
`id` smallint(3) unsigned NOT NULL auto_increment,
`voornaam` varchar(40) NOT NULL default '',
`achternaam` varchar(40) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
--
CREATE TABLE `status` (
`id` smallint(2) unsigned NOT NULL auto_increment,
`status` varchar(25) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
--
CREATE TABLE `uitgeleend` (
`id` smallint(3) unsigned NOT NULL auto_increment,
`leners_id` smallint(3) unsigned NOT NULL default '0',
`dvd_id` smallint(3) unsigned NOT NULL default '0',
`datum_weg` date NOT NULL default '0000-00-00',
`datum_terug` date NOT NULL default '0000-00-00',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
--
CREATE TABLE `acteurs` (
`id` smallint(4) unsigned NOT NULL auto_increment,
`voornaam` varchar(40) NOT NULL default '',
`achternaam` varchar(40) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
--
CREATE TABLE `dvd` (
`id` smallint(3) unsigned NOT NULL auto_increment,
`naam` varchar(120) NOT NULL default '',
`foto` varchar(40) NOT NULL default '',
`omschrijving` text NOT NULL,
`regisseur_id` smallint(3) unsigned NOT NULL default '0',
`speelduur` smallint(3) unsigned NOT NULL default '0',
`jaar` year(4) NOT NULL default '0000',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
--
CREATE TABLE `dvd_acteurs` (
`id` smallint(4) unsigned NOT NULL auto_increment,
`dvd_id` smallint(3) unsigned NOT NULL default '0',
`acteur_id` smallint(3) unsigned NOT NULL default '0',
`personagenaam` varchar(40) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
--
CREATE TABLE `dvd_genres` (
`id` smallint(4) unsigned NOT NULL auto_increment,
`dvd_id` smallint(3) unsigned NOT NULL default '0',
`genre_id` smallint(3) unsigned NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
--
CREATE TABLE `genres` (
`id` smallint(2) unsigned NOT NULL auto_increment,
`genre` varchar(25) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=21 ;
--
-- Gegevens worden uitgevoerd voor tabel `genres`
--
INSERT INTO `genres` VALUES (1, 'actie');
INSERT INTO `genres` VALUES (2, 'avontuur');
INSERT INTO `genres` VALUES (3, 'biografie');
INSERT INTO `genres` VALUES (4, 'documentaire');
INSERT INTO `genres` VALUES (5, 'drama');
INSERT INTO `genres` VALUES (6, 'familie');
INSERT INTO `genres` VALUES (7, 'fantasie');
INSERT INTO `genres` VALUES (8, 'geschiedenis');
INSERT INTO `genres` VALUES (9, 'horror');
INSERT INTO `genres` VALUES (10, 'komedie');
INSERT INTO `genres` VALUES (11, 'kortfilms');
INSERT INTO `genres` VALUES (12, 'misdaad');
INSERT INTO `genres` VALUES (13, 'muziek');
INSERT INTO `genres` VALUES (14, 'oorlog');
INSERT INTO `genres` VALUES (15, 'romantiek');
INSERT INTO `genres` VALUES (16, 'science fiction');
INSERT INTO `genres` VALUES (17, 'sport');
INSERT INTO `genres` VALUES (18, 'tekenfilm');
INSERT INTO `genres` VALUES (19, 'thriller');
INSERT INTO `genres` VALUES (20, 'western');
-- --------------------------------------------------------
--
-- Tabel structuur voor tabel `leners`
--
CREATE TABLE `leners` (
`id` smallint(3) unsigned NOT NULL auto_increment,
`voornaam` varchar(40) NOT NULL default '',
`achternaam` varchar(40) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
--
CREATE TABLE `regisseurs` (
`id` smallint(3) unsigned NOT NULL auto_increment,
`voornaam` varchar(40) NOT NULL default '',
`achternaam` varchar(40) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
--
CREATE TABLE `status` (
`id` smallint(2) unsigned NOT NULL auto_increment,
`status` varchar(25) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
--
CREATE TABLE `uitgeleend` (
`id` smallint(3) unsigned NOT NULL auto_increment,
`leners_id` smallint(3) unsigned NOT NULL default '0',
`dvd_id` smallint(3) unsigned NOT NULL default '0',
`datum_weg` date NOT NULL default '0000-00-00',
`datum_terug` date NOT NULL default '0000-00-00',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
--
Edit:
Alle gegevens in 1 query ophalen is geen probleem het probleem zit er bij in dat alle dvd.id opgehaald worden voor de lijst maar dat hij bij de uitgeleende dvd_id een ander icoontje moet zetten.
Mischien een handig weetje alleen de uitleen datum word ingevuld de retour datum bijft op 0 staan totdat hij terug is gebracht
Gewijzigd op 01/01/1970 01:00:00 door Red Crew
Probeer deze eens:
SELECT d.naam
FROM dvd AS d, uitgeleend AS u
WHERE d.id = u.dvd_id
AND CURDATE() BETWEEN u.datum_weg AND u.datum_terug
SELECT d.naam
FROM dvd AS d, uitgeleend AS u
WHERE d.id = u.dvd_id
AND CURDATE() BETWEEN u.datum_weg AND u.datum_terug
Nu geeft hij aan dat er geen dvd's gevonden zijn :)
Mijn volgende vraag is eigenlijk, ik wil ALLE dvd's inhalen alleen bij de uitgeleende een ander icoontje als bij de anderen dus hoe markeer ik deze dan ?
Mijn volgende vraag is eigenlijk, ik wil ALLE dvd's inhalen alleen bij de uitgeleende een ander icoontje als bij de anderen dus hoe markeer ik deze dan ?
Het hangt er van af hoe je het in je DB bijhoudt. Als een DVD uitgeleend wordt, vul je dan meteen datum_weg en datum_terug in? Of blijft datum_terug leeg tot de DVD terugkomt?
mijn vorige edit
Edit:
Alle gegevens in 1 query ophalen is geen probleem het probleem zit er bij in dat alle dvd.id opgehaald worden voor de lijst maar dat hij bij de uitgeleende dvd_id een ander icoontje moet zetten.
Mischien een handig weetje alleen de uitleen datum word ingevuld en de retour datum bijft op 0 staan totdat hij terug is gebracht
Edit:
Alle gegevens in 1 query ophalen is geen probleem het probleem zit er bij in dat alle dvd.id opgehaald worden voor de lijst maar dat hij bij de uitgeleende dvd_id een ander icoontje moet zetten.
Mischien een handig weetje alleen de uitleen datum word ingevuld en de retour datum bijft op 0 staan totdat hij terug is gebracht
Het kan, maar de query wordt ingewikkelder:
Dit is BIJNA perfect alleen zou ik alle namen willen weergeven uit de tabel dvd's en alleen de uitgeleende dvd's markeren.
op deze manier geeft hij alle dvd's weer die ooit zijn uitgeleend met een aanduiding van de terug gebrachte.
Enig idee wat ik moet veranderen om alle namen uit de tabel dvd ipv uitgeleend weer te geven ?
edit: PHP tags vergeten, was onduidelijk
op deze manier geeft hij alle dvd's weer die ooit zijn uitgeleend met een aanduiding van de terug gebrachte.
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
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
<?php
$sql =mysql_query("
SELECT d.id, d.naam,
CASE
WHEN u.datum_terug < u.datum_weg THEN 'true'
WHEN u.datum_terug >= u.datum_weg THEN 'false'
END
AS dvd_uitgeleend
FROM dvd AS d, uitgeleend AS u
WHERE d.id = u.dvd_id
",$conn);
if ( mysql_num_rows($sql) >= 1 ) {
$i = 0;
echo '<table border="0">'.PHP_EOL;
while ($data = mysql_fetch_array($sql))
{
$naam = stripslashes( $data['naam'] );
$uitgeleend = stripslashes( $data['dvd_uitgeleend']);
echo $uitgeleend;
$i++;
echo '<tr>'.PHP_EOL;
echo '<td class="formleft">'.PHP_EOL;
echo $i.')'.PHP_EOL;
echo '</td>'.PHP_EOL;
echo '<td class="formdata">'.PHP_EOL;
echo '<a href="'.dvd.'?p=detail&id='.$data['id'].'" title="Bekijk de details van '.$naam.'" class="formleft">'.$naam.' </a>'.PHP_EOL;
echo '</td>'.PHP_EOL;
echo '<td>'.PHP_EOL;
if ($data['dvd_uitgeleend'] == 'true') {
echo'<img src="'.coreimg.'bad.jpg" alt="" />'.PHP_EOL;
} else {
echo'<img src="'.coreimg.'good.jpg" alt="" />'.PHP_EOL;
}
echo '</td>'.PHP_EOL;
echo '</tr>'.PHP_EOL;
}
echo '</table>'.PHP_EOL;
} else {
echo 'Er zijn hier geen dvd\'s gevonden.'.PHP_EOL;
?>
}
$sql =mysql_query("
SELECT d.id, d.naam,
CASE
WHEN u.datum_terug < u.datum_weg THEN 'true'
WHEN u.datum_terug >= u.datum_weg THEN 'false'
END
AS dvd_uitgeleend
FROM dvd AS d, uitgeleend AS u
WHERE d.id = u.dvd_id
",$conn);
if ( mysql_num_rows($sql) >= 1 ) {
$i = 0;
echo '<table border="0">'.PHP_EOL;
while ($data = mysql_fetch_array($sql))
{
$naam = stripslashes( $data['naam'] );
$uitgeleend = stripslashes( $data['dvd_uitgeleend']);
echo $uitgeleend;
$i++;
echo '<tr>'.PHP_EOL;
echo '<td class="formleft">'.PHP_EOL;
echo $i.')'.PHP_EOL;
echo '</td>'.PHP_EOL;
echo '<td class="formdata">'.PHP_EOL;
echo '<a href="'.dvd.'?p=detail&id='.$data['id'].'" title="Bekijk de details van '.$naam.'" class="formleft">'.$naam.' </a>'.PHP_EOL;
echo '</td>'.PHP_EOL;
echo '<td>'.PHP_EOL;
if ($data['dvd_uitgeleend'] == 'true') {
echo'<img src="'.coreimg.'bad.jpg" alt="" />'.PHP_EOL;
} else {
echo'<img src="'.coreimg.'good.jpg" alt="" />'.PHP_EOL;
}
echo '</td>'.PHP_EOL;
echo '</tr>'.PHP_EOL;
}
echo '</table>'.PHP_EOL;
} else {
echo 'Er zijn hier geen dvd\'s gevonden.'.PHP_EOL;
?>
}
Enig idee wat ik moet veranderen om alle namen uit de tabel dvd ipv uitgeleend weer te geven ?
edit: PHP tags vergeten, was onduidelijk
Gewijzigd op 01/01/1970 01:00:00 door Red Crew
post ffe veranderd in nix. omdat het er al in stond:P
Gewijzigd op 01/01/1970 01:00:00 door Dion
Het probleem is opgelost.
Deze query werd door Jelmer gemaakt
Deze query werd door Jelmer gemaakt
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$sql =mysql_query("
SELECT
dvd.id as id,
dvd.naam as naam,
COUNT(uitgeleend.id) as dvd_uitgeleend
FROM
dvd
LEFT JOIN
uitgeleend ON uitgeleend.dvd_id = dvd.id
AND
uitgeleend.datum_terug = '0000-00-00'
GROUP BY dvd.id
",$conn);
[/code]
$sql =mysql_query("
SELECT
dvd.id as id,
dvd.naam as naam,
COUNT(uitgeleend.id) as dvd_uitgeleend
FROM
dvd
LEFT JOIN
uitgeleend ON uitgeleend.dvd_id = dvd.id
AND
uitgeleend.datum_terug = '0000-00-00'
GROUP BY dvd.id
",$conn);
[/code]




