Dubbele waarden als 1 samenvatten

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 3 volgende »

David M

David M

07/09/2012 14:07:05
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>';
           }}

?>



Als ik deze uitlees komt er bijvoorbeeld uit:

pizza
pizza
kip
pizza
chinees

hoe zou ik het zo kunnen doen:(?)

pizza (3)
kip
chinees

....
 
PHP hulp

PHP hulp

24/12/2024 00:02:35
 
Flip --

Flip --

07/09/2012 14:13:45
Quote Anchor link
Stel kolom 1 heet "eten_naam"

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 --
 
Kris Peeters

Kris Peeters

07/09/2012 14:21:34
Quote Anchor link
Okay, om te beginnen, spreek de items van een record niet aan met [0], [1] ...
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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
while($record_05 = mysql_fetch_assoc($result_05)){
  ...

  echo $record_05['naam'];
}

?>


Dan de query.
Dat moet zoiets zijn:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
"
;          
?>


Dan kan je $record_05['naam'] en $record_05['aantal'] gebruiken
 
David M

David M

07/09/2012 15:27:04
Quote Anchor link
Ga nu testen.....

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......
 
Flip --

Flip --

07/09/2012 16:31:32
Quote Anchor link
Je query is waarschijnlijk niet goed want anders zou mysql_query() wel een geldige resource terug geven. En zou mysql_fetch_array() niet klagen dat hij geen geldige resource heeft.

Laat de nieuwe versie van je PHP code en query zien.
 
David M

David M

07/09/2012 16:40:48
Quote Anchor link
Flip, ik denk zelf dat het niet mogelijk is met een query en dat er een php script gemaakt moet worden, maar ik zou zo blij zijn als het lukt......
kan ik niet iemand inhuren?

thans:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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>';
 
Flip --

Flip --

07/09/2012 18:17:00
Quote Anchor link
Net even geprobeerd

=== 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 --
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

07/09/2012 18:24:38
Quote Anchor link
Natuurlijk kan dat in één query, zelfs met een groter aantal klanten:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
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
Gewijzigd op 07/09/2012 18:34:15 door Ger van Steenderen
 
David M

David M

07/09/2012 18:26:02
Quote Anchor link
Het lukt me wel als ik het eerst in een temp table wegschrijf en hieruit lees.

het lukt nl. niet omdat de gegevens niet in 1 tabel staan ...
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

07/09/2012 18:27:43
Quote Anchor link
Zie bovenstaande query
 
David M

David M

07/09/2012 18:31:03
Quote Anchor link
Ger, mag ik je vragen om jouw query in mijn script te voegen.....zodat ik mogelijk een Eureka moment heb...
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

07/09/2012 18:40:08
Quote Anchor link
Ik zou zeggen, probeer hem eerst eens uit in PHPMyAdmin o.i.d.
Dan zie je wat voor resultaat je krijgt, mischien dat je dan je Euraka moment al krijgt;-)
Zoniet, dan kijken we verder.
 
David M

David M

07/09/2012 18:48:42
Quote Anchor link
jammer, want het sluit niet aan met mijn script en 1 op 1 in PHPmyAdmin werkt niet..... ben helaas niet goed genoeg.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

07/09/2012 18:57:46
Quote Anchor link
Ik denk dat je de query ook niet 1 op 1 moet overnemen, even controleren op veldnamen en tabelnamen. In mijn eigen logica is een klant enkelvoud dus heb ik klant_naam gebruikt, en de naam van de tabel klanten heb ik ook maar gegokt.

Toevoeging op 07/09/2012 18:58:29:

PS
Eerst moet de query werken, anders kan je er ook niets mee in PHP
 
David M

David M

10/09/2012 12:45:59
Quote Anchor link
Hi Flip,

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........
 
Flip --

Flip --

10/09/2012 12:49:08
Quote Anchor link
SELECT Naam, COUNT( * ) AS Aantal
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 --
 
David M

David M

10/09/2012 13:02:18
Quote Anchor link
Tja ik heb het nu helemaal zoals jij het weergeeft, maar ik krijg uitkomst:



pizza (1)
chinees (1)
pizza (1)
patat (1)

dus per klant alles 1 keer. is bij het uitlezen mysql_fetch_array soms niet goed?
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

10/09/2012 13:27:43
Quote Anchor link
Je had dit toch eerst in de andere tabel staan? tbl_KPK?
 
David M

David M

10/09/2012 13:48:10
Quote Anchor link
Hi Ger,

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)
PHP script in nieuw venster Selecteer het PHP script
1
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"]."&nbsp;(".$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
 
Flip --

Flip --

10/09/2012 14:11:02
Quote Anchor link
Tabel & data:
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 --
 
David M

David M

10/09/2012 14:22:57
Quote Anchor link
OK Flip zo te zien ben ik er bijna.....

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"]
 

Pagina: 1 2 3 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.