Error na het gebruiken van GROUP BY
Als ik deze functie gebruik dan lukt het me wel om in mijn selectbox dubbele merk_naam te filteren.
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
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
public function getMerken($database, $id = NULL)
{
$sql = "SELECT merk_code, merk_naam, merk_logo, wiel_foto, wiel_nummer, wiel_info FROM ".$database."_merken GROUP BY merk_naam";
if(!empty($id))
{
$sql .= " WHERE merk_code=:id";
}
else
{
$sql .= " ORDER BY merk_naam ASC";
}
try
{
$stmt = $this->db->prepare($sql);
if(!empty($id)){ $stmt->bindParam(":id", $id, PDO::PARAM_STR); }
$stmt->execute();
$this->merkenlijst = $stmt->fetchAll(PDO::FETCH_OBJ);
$stmt->closeCursor();
return $this->merkenlijst;
}
catch (Exception $e)
{
die ( $e->getMessage() );
}
}
{
$sql = "SELECT merk_code, merk_naam, merk_logo, wiel_foto, wiel_nummer, wiel_info FROM ".$database."_merken GROUP BY merk_naam";
if(!empty($id))
{
$sql .= " WHERE merk_code=:id";
}
else
{
$sql .= " ORDER BY merk_naam ASC";
}
try
{
$stmt = $this->db->prepare($sql);
if(!empty($id)){ $stmt->bindParam(":id", $id, PDO::PARAM_STR); }
$stmt->execute();
$this->merkenlijst = $stmt->fetchAll(PDO::FETCH_OBJ);
$stmt->closeCursor();
return $this->merkenlijst;
}
catch (Exception $e)
{
die ( $e->getMessage() );
}
}
Echter wanneer ik op submit klik krijg ik deze error:
Fatal error: Call to a member function bindParam() on a non-object in /class/merken.class.php on line 34
Dat is deze lijn:
Hiermee lees ik het uit:
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
<div id="wielen-zoeken">
<?php
include_once "class/merken.class.php";
$merkclass = new merken($dbo);
?>
<br />
<div class="bandwielkolom">
<form action="index.php?lang=nl&p=<?php echo $_GET['p']; ?>#keuze" method="post">
<table class="bandentabel">
<tr>
<th colspan="2">Zoek op merk<a name="wiel"></a></th>
</tr>
<tr>
<td>Merk:</td>
<td>
<select name="wiel_merk">
<option value="0">- Merk -</option>
<?php
$merken = $merkclass->getMerken($website, $merk_code);
foreach($merken as $merk)
{
echo "\t\t\t\t\t\t\t\t\t\t\t<option value=\"".$merk->merk_code."\"";
if(isset($_GET['search']) && $_GET['search'] == "wiel" && isset($_GET['merk']) && $_GET['merk'] == $merk->merk_code || isset($_POST['wiel_submit']) && $_POST['wiel_merk'] == $merk->merk_code) { echo " selected=\"selected\""; }
echo ">".$merk->merk_naam."</option>\n";
}
?>
</select>
</td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="wiel_submit" value="Zoek" /></td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
</table>
</form>
</div>
<div class="clearboth"></div>
<br />
<?php
if(isset($_POST['wiel_submit']) && $_POST['wiel_submit'] == "Zoek" || isset($_GET['merk']))
{
$merk = NULL;
if(isset($_POST['wiel_submit']) && $_POST['wiel_submit'] == "Zoek")
{
$merk = $_POST['wiel_merk'];
}
$merken = $merkclass->getMerken($website, $merk);
foreach($merken as $merk)
{
?>
<img src="http://www.etyre.net/preview/bnet/logos/<?php echo str_replace(".png", "_150.png", $merk->merk_logo); ?>" width="150" class="logo" alt="<?php echo $merk->merk_naam; ?>"/>
<div id="merken">
<li><span class="title"><?php echo $merk->wiel_info; ?></span>
<a href="http://www.inter-tyre.nl/inter-tyre/images/w3/<?php echo $merk->wiel_foto; ?>" class="preview" title="Fotonummer: <?php echo $merk->wiel_foto; ?>">
<img src="http://www.inter-tyre.nl/inter-tyre/images/w2/<?php echo $merk->wiel_foto; ?>" alt="Fotonummer: <?php echo $merk->wiel_foto; ?>" class="wheelImg"/>
</a>
<div class="clearboth"></div>
</div>
<?php
}
?>
<?php
}
?>
<?php
include_once "class/merken.class.php";
$merkclass = new merken($dbo);
?>
<br />
<div class="bandwielkolom">
<form action="index.php?lang=nl&p=<?php echo $_GET['p']; ?>#keuze" method="post">
<table class="bandentabel">
<tr>
<th colspan="2">Zoek op merk<a name="wiel"></a></th>
</tr>
<tr>
<td>Merk:</td>
<td>
<select name="wiel_merk">
<option value="0">- Merk -</option>
<?php
$merken = $merkclass->getMerken($website, $merk_code);
foreach($merken as $merk)
{
echo "\t\t\t\t\t\t\t\t\t\t\t<option value=\"".$merk->merk_code."\"";
if(isset($_GET['search']) && $_GET['search'] == "wiel" && isset($_GET['merk']) && $_GET['merk'] == $merk->merk_code || isset($_POST['wiel_submit']) && $_POST['wiel_merk'] == $merk->merk_code) { echo " selected=\"selected\""; }
echo ">".$merk->merk_naam."</option>\n";
}
?>
</select>
</td>
</tr>
<tr>
<td> </td>
<td><input type="submit" name="wiel_submit" value="Zoek" /></td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
<tr>
<td colspan="2"> </td>
</tr>
</table>
</form>
</div>
<div class="clearboth"></div>
<br />
<?php
if(isset($_POST['wiel_submit']) && $_POST['wiel_submit'] == "Zoek" || isset($_GET['merk']))
{
$merk = NULL;
if(isset($_POST['wiel_submit']) && $_POST['wiel_submit'] == "Zoek")
{
$merk = $_POST['wiel_merk'];
}
$merken = $merkclass->getMerken($website, $merk);
foreach($merken as $merk)
{
?>
<img src="http://www.etyre.net/preview/bnet/logos/<?php echo str_replace(".png", "_150.png", $merk->merk_logo); ?>" width="150" class="logo" alt="<?php echo $merk->merk_naam; ?>"/>
<div id="merken">
<li><span class="title"><?php echo $merk->wiel_info; ?></span>
<a href="http://www.inter-tyre.nl/inter-tyre/images/w3/<?php echo $merk->wiel_foto; ?>" class="preview" title="Fotonummer: <?php echo $merk->wiel_foto; ?>">
<img src="http://www.inter-tyre.nl/inter-tyre/images/w2/<?php echo $merk->wiel_foto; ?>" alt="Fotonummer: <?php echo $merk->wiel_foto; ?>" class="wheelImg"/>
</a>
<div class="clearboth"></div>
</div>
<?php
}
?>
<?php
}
?>
Iemand een idee hoe ik die error op kan vangen of wat ik fout doe?
Het probleem met je query is dit:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$sql = "SELECT merk_code, merk_naam, merk_logo, wiel_foto, wiel_nummer, wiel_info
FROM ".$database."_merken
GROUP BY merk_naam";
if(!empty($id))
{
$sql .= " WHERE merk_code=:id";
}
else
{
$sql .= " ORDER BY merk_naam ASC";
}
//dit resulteert in:
$sql = "SELECT merk_code, merk_naam, merk_logo, wiel_foto, wiel_nummer, wiel_info
FROM ".$database."_merken
GROUP BY merk_naam
WHERE merk_code=:id";
?>
$sql = "SELECT merk_code, merk_naam, merk_logo, wiel_foto, wiel_nummer, wiel_info
FROM ".$database."_merken
GROUP BY merk_naam";
if(!empty($id))
{
$sql .= " WHERE merk_code=:id";
}
else
{
$sql .= " ORDER BY merk_naam ASC";
}
//dit resulteert in:
$sql = "SELECT merk_code, merk_naam, merk_logo, wiel_foto, wiel_nummer, wiel_info
FROM ".$database."_merken
GROUP BY merk_naam
WHERE merk_code=:id";
?>
Een WHERE statement moet altijd voor de GROUP BY komen.
Gewijzigd op 17/07/2012 10:12:00 door Erwin H
Nogmaals bedankt! Je hebt m'n dag weer goed gemaakt:)
Haha, laten we zeggen dat je de fout een keer gemaakt moet hebben voor je hem kan vinden ;-)
Er zit nochtans een logica in de volgorde. Als je even met mySQL mee-redeneert, zou je tot de zelfde volgorde komen.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
SELECT ...
FROM mijn_tabel // we gaan zoeken in deze tabel
WHERE ... // clausule. Eerst gaan we filteren in het aantal records die we nodig hebben
GROUP BY ... // met de records die we hebben, maken we een nieuwe tabel, alles gegroepeerd rond ...
ORDER BY ... // Die nieuw-samengestelde tabel kunnen we nu sorteren
LIMIT ... // We hebben een gesorteerde tabel, en als laatste kiezen we welk van de records van die tabel we naar php gaan sturen
FROM mijn_tabel // we gaan zoeken in deze tabel
WHERE ... // clausule. Eerst gaan we filteren in het aantal records die we nodig hebben
GROUP BY ... // met de records die we hebben, maken we een nieuwe tabel, alles gegroepeerd rond ...
ORDER BY ... // Die nieuw-samengestelde tabel kunnen we nu sorteren
LIMIT ... // We hebben een gesorteerde tabel, en als laatste kiezen we welk van de records van die tabel we naar php gaan sturen
Gewijzigd op 17/07/2012 11:47:11 door Kris Peeters