Dubbele waarden als 1 samenvatten
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$sql="SELECT * FROM tbl_KPK WHERE KLANTEN_ID=".$record['0'];
$result_04= mysql_query($sql);
while($record_04= mysql_fetch_array($result_04)){
$sql="SELECT * FROM tbl_Keukens WHERE KEUKEN_ID=".$record_04["2"];
$result_05= mysql_query($sql);
while($record_05 = mysql_fetch_array($result_05)){
echo '<ul><li>';
echo $record_05["1"];
echo '</li></ul>';
}}
?>
$sql="SELECT * FROM tbl_KPK WHERE KLANTEN_ID=".$record['0'];
$result_04= mysql_query($sql);
while($record_04= mysql_fetch_array($result_04)){
$sql="SELECT * FROM tbl_Keukens WHERE KEUKEN_ID=".$record_04["2"];
$result_05= mysql_query($sql);
while($record_05 = mysql_fetch_array($result_05)){
echo '<ul><li>';
echo $record_05["1"];
echo '</li></ul>';
}}
?>
Als ik deze uitlees komt er bijvoorbeeld uit:
pizza
pizza
kip
pizza
chinees
hoe zou ik het zo kunnen doen:(?)
pizza (3)
kip
chinees
....
SELECT *, count(eten_naam) as aantal FROM tbl_Keukens WHERE KEUKEN_ID=".$record_04["2"] GROUP BY eten_naam;
Kan je dit proberen? Ik weet namelijk niet zeker of het klopt. Komt in ieder geval erg in de buurt ...
Gewijzigd op 07/09/2012 14:14:26 door Flip --
Maar met de naam van het veld.
Laat me even speculeren en er van uit gaan dat veld [1] overeen komt met ['naam'].
Dan doe je
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
while($record_05 = mysql_fetch_assoc($result_05)){
...
echo $record_05['naam'];
}
?>
while($record_05 = mysql_fetch_assoc($result_05)){
...
echo $record_05['naam'];
}
?>
Dan de query.
Dat moet zoiets zijn:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
$sql="
SELECT naam, COUNT(KEUKEN_ID) AS aantal
FROM tbl_Keukens
WHERE KEUKEN_ID=" . $record_04["2"] ."
GROUP BY naam
";
?>
$sql="
SELECT naam, COUNT(KEUKEN_ID) AS aantal
FROM tbl_Keukens
WHERE KEUKEN_ID=" . $record_04["2"] ."
GROUP BY naam
";
?>
Dan kan je $record_05['naam'] en $record_05['aantal'] gebruiken
Toevoeging op 07/09/2012 15:47:39:
De query is goed maar in het totaal script is er iets niet goed.
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /Applications/XAMPP/xamppfiles/htdocs/ws/view/templates/klanten_inner_left.phtml on line 36
Het zijn 2 tabellen die na elkaar gelezen worden:
tabel:
tbl_KPK
_______
KPK_ID
KLANTEN_ID
KEUKEN_ID
tbl_Keukens
___________
KEUKEN_ID
keuken_naam (1. pizza , 2. chinees, 3. patat enz...)
1 KLANTEN_ID heeft max 2 keuken_naam
klant A: pizza - chinees
klant B: pizza - patat
klant C: pizza - .....
dus uitlezen geeft:
pizza
chinees
pizza
patat
pizza
......
en moet worden
pizza 3
chinees
patat
........
lukt dit met een Query? Ik weet vraag nu wel erg veel......
Laat de nieuwe versie van je PHP code en query zien.
kan ik niet iemand inhuren?
thans:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$sql="SELECT * FROM tbl_KPK WHERE KLANTEN_ID=".$record['KLANTEN_ID'];
$result_04= mysql_query($sql);
while($record_04= mysql_fetch_array($result_04)){
$sql="SELECT keuken_naam, COUNT(*)
FROM tbl_Keukens
WHERE KEUKEN_ID=".$record_04["KEUKEN_ID"]."
GROUP BY keuken_naam";
$result_05= mysql_query($sql);
while($record_05 = mysql_fetch_array($result_05)){
echo '<li>';
echo "<a href=index.php?page=restaurants class=\"sprite_link\" title=\"".$record_05["keuken_naam"]."\" >";
echo $record_05["keuken_naam"];
echo '</a>';
echo '</li>';
$result_04= mysql_query($sql);
while($record_04= mysql_fetch_array($result_04)){
$sql="SELECT keuken_naam, COUNT(*)
FROM tbl_Keukens
WHERE KEUKEN_ID=".$record_04["KEUKEN_ID"]."
GROUP BY keuken_naam";
$result_05= mysql_query($sql);
while($record_05 = mysql_fetch_array($result_05)){
echo '<li>';
echo "<a href=index.php?page=restaurants class=\"sprite_link\" title=\"".$record_05["keuken_naam"]."\" >";
echo $record_05["keuken_naam"];
echo '</a>';
echo '</li>';
=== Table:
CREATE TABLE IF NOT EXISTS `keukens` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Naam` tinytext NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;
=== Values:
INSERT INTO `keukens` (`ID`, `Naam`) VALUES
(1, 'pizza'),
(2, 'chinees'),
(3, 'pizza'),
(4, 'patat'),
(5, 'pizza');
=== Query:
SELECT Naam, COUNT( * ) AS Aantal
FROM keukens
GROUP BY Naam
=== Resultaat:
Naam Aantal
chinees 1
patat 1
pizza 3
echt geen idee waarom dat bij jou niet zou lukken ...
zie ook: http://www.phphulp.nl/php/forum/topic/combinaties-query/86541/
en: http://database-programmer.blogspot.nl/2008/04/group-by-having-sum-avg-and-count.html
Gewijzigd op 07/09/2012 18:20:54 door Flip --
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
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
SELECT
k.klant_id,
k.klant_naam,
ke.keuken_id,
ke.keuken_naam,
COUNT(ke.keuken_id) AS aantal,
FROM (
SELECT
klant_id,
klant_naam
FROM
klanten
ORDER BY
klant_naam
LIMIT 0, 10
) AS k
LEFT JOIN
tbl_KPK AS kp
USING
(klanten_id)
LEFT JOIN
tbl_keuken AS ke
ON
kp.keuken_id = ke.keuken_id
GROUP BY
k.klanten_id,
k.klant_naam,
ke.keuken_naam,
ke.keuken_id
k.klant_id,
k.klant_naam,
ke.keuken_id,
ke.keuken_naam,
COUNT(ke.keuken_id) AS aantal,
FROM (
SELECT
klant_id,
klant_naam
FROM
klanten
ORDER BY
klant_naam
LIMIT 0, 10
) AS k
LEFT JOIN
tbl_KPK AS kp
USING
(klanten_id)
LEFT JOIN
tbl_keuken AS ke
ON
kp.keuken_id = ke.keuken_id
GROUP BY
k.klanten_id,
k.klant_naam,
ke.keuken_naam,
ke.keuken_id
Gewijzigd op 07/09/2012 18:34:15 door Ger van Steenderen
het lukt nl. niet omdat de gegevens niet in 1 tabel staan ...
Zie bovenstaande query
Ger, mag ik je vragen om jouw query in mijn script te voegen.....zodat ik mogelijk een Eureka moment heb...
Dan zie je wat voor resultaat je krijgt, mischien dat je dan je Euraka moment al krijgt;-)
Zoniet, dan kijken we verder.
jammer, want het sluit niet aan met mijn script en 1 op 1 in PHPmyAdmin werkt niet..... ben helaas niet goed genoeg.
Toevoeging op 07/09/2012 18:58:29:
PS
Eerst moet de query werken, anders kan je er ook niets mee in PHP
Met betrekking tot jouw oplossing.... stel nu dat er nog 1 kolom bij zit dus:
NSERT INTO `keukens` (`ID`, `Naam`) VALUES
(1, 'pizza', 'klant1'),
(2, 'chinees', 'klant1'),
(3, 'pizza','klant2'),
(4, 'patat', 'klant2'),
(5, 'pizza', 'klant3');
en ik moet dezelfde uitkomst krijgen maar alleen van klant1 en klant 2
dus tijdens een session heb ik alleen klant 1 en klant2
pizza(2)
chinees(1)
patat(1)
of iemand anders........
FROM keukens
WHERE Klant = 'klant1' OR Klant = 'klant2'
GROUP BY Naam
Bij je insert ben je trouwens die derde kolom vergeten die ik zelf even "Klant" heb genoemd
Gewijzigd op 10/09/2012 12:50:49 door Flip --
pizza (1)
chinees (1)
pizza (1)
patat (1)
dus per klant alles 1 keer. is bij het uitlezen mysql_fetch_array soms niet goed?
Je had dit toch eerst in de andere tabel staan? tbl_KPK?
Ja klopt, ik probeer het eenvoudiger op te lossen. Zoals ik het nu heb worden een aantal klanten geslecteerd.
Deze staan dan in een tabel tbl_KPK als KLANT_ID (jouw tip ipv van KLANTEN_ID) tezamen met KEUKEN_ID (primary key is KPK_ID)
En KEUKEN_ID komt dan weer voor (als prim key ) in tabel tbl_Keukens tezamen met keuken_naam
Jouw query heb ik vanochtend geprobeerd, maar is iets te moeilijk voor me, vandaar dat ik de wat voor mij begrijpende query van FLip pak....
Toevoeging op 10/09/2012 14:04:01:
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
$sql="SELECT KEUKEN_ID,
COUNT(KPK_ID) AS aantal
FROM tbl_KPK
WHERE KLANT_ID=1
GROUP BY KEUKEN_ID";
$result_04= mysql_query($sql);
while($record_04= mysql_fetch_array($result_04)){
echo $record_04["KEUKEN_ID"]." (".$record_04["aantal"].")<br>";
}
COUNT(KPK_ID) AS aantal
FROM tbl_KPK
WHERE KLANT_ID=1
GROUP BY KEUKEN_ID";
$result_04= mysql_query($sql);
while($record_04= mysql_fetch_array($result_04)){
echo $record_04["KEUKEN_ID"]." (".$record_04["aantal"].")<br>";
}
hier heb ik where KLANT_ID is 1 ingevoerd en dan gaat het goed, maar als ik (bijv ) KLANT_ID=1 or 2 invoer leest het de gehele tbl_KPK uit.. pfff
CREATE TABLE IF NOT EXISTS `keukens` (
`ID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Naam` tinytext CHARACTER SET latin1 NOT NULL,
`KlantID` int(10) unsigned NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;
INSERT INTO `keukens` (`ID`, `Naam`, `KlantID`) VALUES
(1, 'pizza', 1),
(2, 'chinees', 1),
(3, 'pizza', 2),
(4, 'patat', 2),
(5, 'pizza', 3);
Query:
SELECT Naam, COUNT( * ) AS Aantal
FROM keukens
WHERE KlantID = 1 OR KlantID = 2
GROUP BY Naam
Resultaat:
chinees 1
patat 1
pizza 2
----
"maar als ik (bijv ) KLANT_ID=1 or 2 invoer"
Dat leest SQL als:
(KLANT_ID = 1) or (2)
KLANT_ID = 1 -> is soms waar
2 -> is positief dus is altijd waar
Gewijzigd op 10/09/2012 14:14:37 door Flip --
als ik deze regel " WHERE KlantID = 1 OR KlantID = 2 exact zo gebruik werkt het.
Dus hoe noteer ik het als de KlantID's als variabelen worden aangeleverd.
Dus ipv WHERE KlantID = 1 OR KlantID = 2 staat er WHERE KlantID=$record["KlantID"]