Dubbele waarden als 1 samenvatten
Pagina: « vorige 1 2 3 volgende »
Straks zul je toch eens moeten gaan kijken naar die JOINS, want dit is niet echt "the way to go".
Gewijzigd op 10/09/2012 14:33:39 door Flip --
(KLANT_ID = 1) or (2)
KLANT_ID = 1 -> is soms waar
2 -> is positief dus is altijd waar
OK maar mijn KLantID komt ook uit de Database en zit dus in $record["KLantID"] en als ik dit iv KLantID=1 or enz.... invoer werkt het weer niet
Toevoeging op 10/09/2012 14:41:16:
JOINS .. ik heb ook gevoel dat niet wat to go is, maar voorlopig is het, het uitlezen van 1 tabel waarbij KLANT_ID een variable is,of bedoel je Klanten tabel JOIN met de rest....
En dan kom je dus ongeveer uit op de query die ik je in het begin gaf, dus wat is de query waarmme je de (online?)klanten ophaalt?
Waarom dan nog die postcode?
postcode is nodig om te zoeken in een bepaalde regio. Je moet denken aan de website thuisbezorgd.nl.... iemand voert postcode in en je krijgt aantal restaurants in de buurt
Volgens mij gooi je nu een aantal dingen door elkaar en/of je hebt6 de database niet goed opgebouwd.
Probeer eens wat duidelijker uit te leggen wat precies de bedoeling is.
Ik heb 3 tabellen. (tbl_Klanten, tbl_KPK en tbl_Keukens)
van tabel tbl_Klanten is alleen belangrijk (voor deze kwestie) de KLANT_ID .
Stel nu dat ik dmv een session 4 klanten genereer.
tbl_KPK bestaat uit:
KPK_ID (PK) - KLANT_ID - KEUKEN_ID
1 1 1
2 1 2
3 2 1
4 2 2
5 3 1
6 3 3
tbl_Keuken bestaat uit:
KEUKEN_ID - keuken_naam
1 pizza
2 chinees
3 mexicaans
als ik nu In een Session klant 1 en 2 heb wil ik gedisplayd hebben:
pizza (2)
chinees (2)
want klant 1 heeft 1 x pizza en 1 x chinees en klant 2 idem, dus totaal is er 2 pizza en 2 x chinees te selecteren.
alvast 1000 x dank!
Toevoeging op 10/09/2012 16:20:24:
Stel nu dat ik dmv een session 4 klanten genereer. -> 2 klanten bedoel ik
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
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
SELECT klant_naam, keuken_naam, aantal
FROM
(SELECT
kl.klant_naam,
ke.keuken_naam,
COUNT(keuken_id) AS aantal
FROM
klanten AS kl
LEFT JOIN
tbl_KPK USING (klant_id)
LEFT JOIN
tbl_keukens AS ke USING (keuken_id)
GROUP BY
ke.keuken_naam, kl.klant_naam ASC
WITH ROLLUP) AS r
ORDER BY klant_naam, keuken_naam
->
+ --------------- + ---------------- + ----------- +
| klant_naam | keuken_naam | aantal |
+ --------------- + ---------------- + ----------- +
| | | 5 |
| | Chinees | 1 |
| | Patat | 1 |
| | Pizza | 3 |
| klant 1 | Chinees | 1 |
| klant 1 | Pizza | 1 |
| klant 2 | Patat | 1 |
| klant 2 | Pizza | 1 |
| klant 3 | Pizza | 1 |
+ --------------- + ---------------- + ----------- +
9 rows
FROM
(SELECT
kl.klant_naam,
ke.keuken_naam,
COUNT(keuken_id) AS aantal
FROM
klanten AS kl
LEFT JOIN
tbl_KPK USING (klant_id)
LEFT JOIN
tbl_keukens AS ke USING (keuken_id)
GROUP BY
ke.keuken_naam, kl.klant_naam ASC
WITH ROLLUP) AS r
ORDER BY klant_naam, keuken_naam
->
+ --------------- + ---------------- + ----------- +
| klant_naam | keuken_naam | aantal |
+ --------------- + ---------------- + ----------- +
| | | 5 |
| | Chinees | 1 |
| | Patat | 1 |
| | Pizza | 3 |
| klant 1 | Chinees | 1 |
| klant 1 | Pizza | 1 |
| klant 2 | Patat | 1 |
| klant 2 | Pizza | 1 |
| klant 3 | Pizza | 1 |
+ --------------- + ---------------- + ----------- +
9 rows
Zo nu eerst een Bavaria!
Toevoeging op 10/09/2012 17:00:02:
Kan ik dit script ergens de code WHERE KLANT_ID = $record["KLANT_ID"]
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
"SELECT tbl_Klanten.KLANT_ID, tbl_KPK.KEUKEN_ID
FROM tbl_Klanten LEFT JOIN tbl_KPK
ON tbl_Klanten.KLANT_ID=tbl_KPK.KLANT_ID
";
$result= mysql_query($sql);
while($record= mysql_fetch_array($result)){
echo $record["KLANT_ID"]."-".$record["KEUKEN_ID"];
echo "<br>";
}
FROM tbl_Klanten LEFT JOIN tbl_KPK
ON tbl_Klanten.KLANT_ID=tbl_KPK.KLANT_ID
";
$result= mysql_query($sql);
while($record= mysql_fetch_array($result)){
echo $record["KLANT_ID"]."-".$record["KEUKEN_ID"];
echo "<br>";
}
Toevoeging op 10/09/2012 17:00:30:
KWIJT
BTB
Hoe bepaal jij dan welke klant_id's in een 'sessie'. Zo te zien uit een query.
Een join is niets meer dan kolommen uit meerdere tabellen (onder bepaalde voorwaarden) samenvoegen tot één virtuele tabel.
Dus als je voor de group by een where clause invoegt, krijg je hetzelfde effect als met afzonderlijke queries te werken.
Ik kan helaas (wegens gebrek aan kennis ) jouw query niet reproduceren. Kan ik niet even langs rijden met kratjes bavaria..... :-)
Toevoeging op 10/09/2012 17:21:42:
Ger als ik inderdaad boven GROUP BY ...WHERE gebruik kan ik dat net zoals by Flip eerder vandaag alleen maar aangeven WHERE KLANT_ID=1 OR KLANT_ID=2 enz... en niet WHERE KLANT_ID=$record["KLANT_ID"] ? Hoe zou ik dit moeten noteren?
PS meen het van die krat of ......
David check je PM's
Deze werken afzonderlijk :
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
$sql="SELECT
tbl_KPK.KEUKEN_ID,
tbl_Keukens.keuken_naam
FROM tbl_KPK LEFT JOIN tbl_Keukens
ON tbl_KPK.KEUKEN_ID=tbl_Keukens.KEUKEN_ID
WHERE KLANT_ID=1 OR KLANT_ID=2
GROUP BY keuken_naam";
tbl_KPK.KEUKEN_ID,
tbl_Keukens.keuken_naam
FROM tbl_KPK LEFT JOIN tbl_Keukens
ON tbl_KPK.KEUKEN_ID=tbl_Keukens.KEUKEN_ID
WHERE KLANT_ID=1 OR KLANT_ID=2
GROUP BY keuken_naam";
Code (php)
1
2
3
4
5
6
2
3
4
5
6
$sql="SELECT KEUKEN_ID,
COUNT(*) AS aantal
FROM tbl_KPK
WHERE KLANT_ID=1 or KLANT_ID=2
GROUP BY KEUKEN_ID";
COUNT(*) AS aantal
FROM tbl_KPK
WHERE KLANT_ID=1 or KLANT_ID=2
GROUP BY KEUKEN_ID";
NU nog combineren en tot slot WHERE KLANT_ID= uit database......
Toevoeging op 10/09/2012 22:30:20:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
SELECT KEUKEN_ID, keuken_naam, aantal
FROM
(SELECT
ki.KEUKEN_ID,
ke.keuken_naam,
COUNT(KEUKEN_ID) AS aantal
FROM tbl_KPK AS ki
LEFT JOIN
tbl_Keukens AS ke USING (KEUKEN_ID)
WHERE KLANT_ID=1
GROUP BY
ke.keuken_naam
WITH ROLLUP) AS r
FROM
(SELECT
ki.KEUKEN_ID,
ke.keuken_naam,
COUNT(KEUKEN_ID) AS aantal
FROM tbl_KPK AS ki
LEFT JOIN
tbl_Keukens AS ke USING (KEUKEN_ID)
WHERE KLANT_ID=1
GROUP BY
ke.keuken_naam
WITH ROLLUP) AS r
bovenstaand komt erg in de buurt van hetgeen ik zou willen, maar ik moet nu handmatig invoeren WHERE KLANT_ID=1 OR KLANT_ID=2....enz.
Terwijl als ik echo $record[KLANT_ID]; een uitkomst krijg van (bijvoorbeeld) 1245 moet ik dit omvormen via PHP script naar KLANT_ID=1 or enz enz of is hier een handigheidje in de schrijfwijze voor?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
$klantenids = array()
//dan kan je elke keer als je een id wilt
//toevoegen heel simpel
$klantenids[] = 1; // 1 komt dan bv uit $record['klant_id']
//SQl heeft de optie om te controleren of waardes in een lijst voorkomen
//met WHERE waarde IN ('check1', 'check2')
$where = "\t" . "WHERE klant_id IN ('";
$where .= implode("','" , $klantenids) . "')" . PHP_EOL;
// echo $where zou dit geven
// WHERE klant_id IN ('1','2','4','5')
?>
$klantenids = array()
//dan kan je elke keer als je een id wilt
//toevoegen heel simpel
$klantenids[] = 1; // 1 komt dan bv uit $record['klant_id']
//SQl heeft de optie om te controleren of waardes in een lijst voorkomen
//met WHERE waarde IN ('check1', 'check2')
$where = "\t" . "WHERE klant_id IN ('";
$where .= implode("','" , $klantenids) . "')" . PHP_EOL;
// echo $where zou dit geven
// WHERE klant_id IN ('1','2','4','5')
?>
Als je $where dus op de juiste plaats in de query plakt, heb je wat je wilt.
Gewijzigd op 11/09/2012 08:49:29 door Ger van Steenderen
output:
WHERE klant_id IN ('1','2','4','5')
dus:
WHERE KLANT_ID=WHERE klant_id IN ('1','2','4','5')
is wat jij krijgt.
echo $where; geeft dit als uitkomst:
WHERE KLANT_ID IN ('1') WHERE KLANT_ID IN (' WHERE KLANT_ID IN ('1') 1') WHERE KLANT_ID IN (' WHERE KLANT_ID IN (' WHERE KLANT_ID IN ('1') 1') 1') WHERE KLANT_ID IN (' WHERE KLANT_ID IN (' WHERE KLANT_ID IN (' WHERE KLANT_ID IN ('1') 1') 1') 1')
Ik was een ; vergeten op regel 8 in de code :-(
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
SELECT KEUKEN_ID, keuken_naam, aantal
FROM
(SELECT
ki.KEUKEN_ID,
ke.keuken_naam,
COUNT(KEUKEN_ID) AS aantal
FROM tbl_KPK AS ki
LEFT JOIN
tbl_Keukens AS ke USING (KEUKEN_ID)
WHERE KLANT_ID=".$where."
GROUP BY
ke.keuken_naam
WITH ROLLUP) AS r
ORDER BY keuken_naam
FROM
(SELECT
ki.KEUKEN_ID,
ke.keuken_naam,
COUNT(KEUKEN_ID) AS aantal
FROM tbl_KPK AS ki
LEFT JOIN
tbl_Keukens AS ke USING (KEUKEN_ID)
WHERE KLANT_ID=".$where."
GROUP BY
ke.keuken_naam
WITH ROLLUP) AS r
ORDER BY keuken_naam
uitkomst:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /Applications/XAMPP/xamppfiles/htdocs/ws/view/templates/klanten_inner_left_test.phtml on line 52
Toevoeging op 11/09/2012 10:32:29:
echo $where : WHERE KLANT_ID IN ('1') WHERE KLANT_ID IN ('1') WHERE KLANT_ID IN ('1') WHERE KLANT_ID IN ('1')
Toevoeging op 11/09/2012 10:45:07:
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
$klantenids = array();
//dan kan je elke keer als je een id wilt
//toevoegen heel simpel
$klantenids[] = $record['KLANT_ID']; // 1 komt dan bv uit $record['klant_id']
//SQl heeft de optie om te controleren of waardes in een lijst voorkomen
//met WHERE waarde IN ('check1', 'check2')
$where = "\t" . "WHERE klant_id IN ('";
$where .= implode("','" , $klantenids) . "')" . PHP_EOL;
// echo $where zou dit geven
// WHERE klant_id IN ('1','2','4','5')
echo $where;
?>
$klantenids = array();
//dan kan je elke keer als je een id wilt
//toevoegen heel simpel
$klantenids[] = $record['KLANT_ID']; // 1 komt dan bv uit $record['klant_id']
//SQl heeft de optie om te controleren of waardes in een lijst voorkomen
//met WHERE waarde IN ('check1', 'check2')
$where = "\t" . "WHERE klant_id IN ('";
$where .= implode("','" , $klantenids) . "')" . PHP_EOL;
// echo $where zou dit geven
// WHERE klant_id IN ('1','2','4','5')
echo $where;
?>
Nu:
WHERE klant_id IN ('1') WHERE klant_id IN ('2') WHERE klant_id IN ('4') WHERE klant_id IN ('5')