[PHP/MySQL] Order-info naar juiste personen mailen*

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • harald.h.
  • Registratie: Juli 2000
  • Laatst online: 24-01-2023
ik heb een tabel met bestellingen met de volgende velden:
sessionid
naam_product
producent _naam
anzahl

Nu kan iemand producten bestellen van verschillende producenten,
aangezien bestelling niet centraal zullen worden afgehandeld, moeten de bestellingen direct naar de juiste producent gemaild worden
dus een bestelling van één persoon, kan verschillende kanten opgaan.

ik heb veel geprobeerd, while in combinatie met foreach etc...maar ik neem net de juiste combinatie's niet ben ik bang...

ik wil dus de info gesorteerd per producent en gemaild, van één session

Dit heb ik tot nu toe,
volgens mij zit ik op weg, maar het reultaat is er niet naar...

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$id = $PHPSESSID; 
if($_GET['check'] == "out"){ 
    $query = "SELECT * FROM tbl_bestelling WHERE sessionid='$id'"; 
    $sql = mysql_query($query); 
    while($result = mysql_fetch_array($sql)){ 
        $query2 = "SELECT producent_naam FROM tbl_bestelling WHERE sessionid='$id'"; 
        $sql2 = mysql_query($query2); 
        $num = mysql_num_rows($sql2); 
        $result2 = mysql_fetch_array($sql2); 
        $i = 0; 
            for($i=0;$i<$num;$i++){ 
                $query3 = "SELECT * FROM tbl_bestelling WHERE producent_naam='$result2[$i]' AND sessionid='$id'"; 
                $sql3 = mysql_query($query3); 
                $result3 = mysql_fetch_array($sql3); 
            echo $result3['producent_naam']."&nbsp;".$result3['naam_product']."&nbsp;".$result3['anzahl']."<br />";     
            } 
} 
echo $num; 
}


maar dit geeft dus alleen de eerste bestelling drie keer weer...

ik weet dat die selects nogal veelvuldig en overbodig zijn, ik ben er ook nog niet zo heel erg lang mee bezig
en geloof me dat ik al heel wat faq's manuals etc bekeken heb, maar ik gebruik volgens mij de verkeerde combi's om en op sessionid en op producent_naam tegelijk te filteren
als het me al lukt, krijg ik allen de bestelling van de eerste producent te zien, en de tweede niet
en dat komt omdat ik de verkeerde combi van while for etc gebruik
ik ben er al een tijdje druk mee en kokm er gewoon niet meer uit

[ Voor 20% gewijzigd door harald.h. op 23-11-2005 10:36 ]


Acties:
  • 0 Henk 'm!

  • Rhapsody
  • Registratie: Oktober 2002
  • Laatst online: 11:41

Rhapsody

In Metal We Trust

Lijn je code even netjes uit en zet het tussen code tags ( [ code = php] ... [/code] )

🇪🇺 pro Europa! | Puinhoop Veroorzaken en Vertrekken (PVV)


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Zoek eens op wat joins zijn. Die kun je wel gebruiken. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Ik denk dat je in de faq wel nuttige informatie kunt vinden: P&W FAQ - SQL

Oops! Google Chrome could not find www.rijks%20museum.nl


Acties:
  • 0 Henk 'm!

  • sjroorda
  • Registratie: December 2001
  • Laatst online: 14:31
Ik denk dat je je queries gewoon verkeerd geschreven hebt: je hebt nu:
PHP:
1
2
3
$query = "SELECT * FROM tbl_bestelling WHERE sessionid='$id'";
$query2 = "SELECT producent_naam FROM tbl_bestelling WHERE sessionid='$id'";
$query3 = "SELECT * FROM tbl_bestelling WHERE producent_naam='$result2[$i]' AND sessionid='$id'";


Drie keer een select uit dezelfde tabel? Dat kan handiger. Ik vermoed dat je iets nodig hebt dat er meer als volgt uitziet (in 1 query):
code:
1
SELECT tbl_producenten.* FROM tbl_producenten, tbl_bestelling WHERE tbl_bestelling.sessionid = $id AND tbl_producenten.id = tbl_bestelling.producent_id

Acties:
  • 0 Henk 'm!

  • harald.h.
  • Registratie: Juli 2000
  • Laatst online: 24-01-2023
ok, maar met mijn derde query haal ik toch ook die info eruit dacht ik?
en ik krijg ook wel resultaat, alleen als ik een bestelling doe van twee verschillende producenten
krijg ik niet als ik die "echo" twee keer een overzicht te zien, dus van die twee verschillende producenten
ik krijg dan alleen de gegevens van de eerste producent in de tabel bestellingen te zien

ik weet dat ik nog wat te leren heb met query's wat efficientie betreft, maar op dit moment is het voor mij belangrijker om de juiste info uit die tabel bestelligen te halen zodat ik verder kan

Acties:
  • 0 Henk 'm!

Verwijderd

Begrijp ik het goed dat sessionid niet uniek is? Dan zou je het inderdaad kunnen doen met een join.

Meestal is een id uniek, maar aangezien je door je result van query1 itereert, is dat niet het geval volgens mij.

Edit:

@-NMe-: Hoe wil je een join doen als er maar 1 tabel is :)? In de queries die genoemd worden, wordt maar 1 tabel gebruikt...

Geeft query1 niet genoeg informatie? Je haalt alle producent_namen op waarvoor sessionid gelijk is aan $id, dat wil je toch ook? 8)7

[ Voor 40% gewijzigd door Verwijderd op 23-11-2005 11:20 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op woensdag 23 november 2005 @ 11:17:
@-NMe-: Hoe wil je een join doen als er maar 1 tabel is :)? In de queries die genoemd worden, wordt maar 1 tabel gebruikt...
Je kan een tabel ook joinen op zichzelf. Gezien de loopstructuur die hij gebruikt lijkt joinen me wel nodig, ook al betreft het dezelfde tabel. :P

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

-NMe- schreef op woensdag 23 november 2005 @ 11:22:
[...]

Je kan een tabel ook joinen op zichzelf. Gezien de loopstructuur die hij gebruikt lijkt joinen me wel nodig, ook al betreft het dezelfde tabel. :P
Oh ja niet aangedacht :) Dan wordt het zoiets als
code:
1
SELECT * FROM tbl_bestelling JOIN tbl_bestelling ON producent_naam WHERE sessionid='$id'

Volgens mij slaat dit nergens op :+ Maar ik snap niet echt waarom het niet direct in query 1 kan en heb ook geen ervaring met joins op 1 tabel :).

@TS: kun je misschien een voorbeeld geven waarom het niet in 1 query kan? Een sessie-id is dus niet uniek, kan een sessie-id ook bij verschillende productennamen voorkomen?

D.w.z. dat er bv. 2 rijen zijn met sessie-id 1 en waarvoor bij rij 1 geldt dat producent_naam A is en bij rij 2 producten_naam B?

[ Voor 10% gewijzigd door Verwijderd op 23-11-2005 11:30 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Waarom zo moeilijk is dit niet genoeg dan??

code:
1
SELECT * FROM tbl_bestelling WHERE sessionid='$id' ORDER BY producent_naam;

Acties:
  • 0 Henk 'm!

  • harald.h.
  • Registratie: Juli 2000
  • Laatst online: 24-01-2023
D.w.z. dat er bv. 2 rijen zijn met sessie-id 1 en waarvoor bij rij 1 geldt dat producent_naam A is en bij rij 2 producten_naam B?
precies zoals hierboven beschreven, zo is het
sessionid is inderdaad niet uniek

[ Voor 12% gewijzigd door harald.h. op 23-11-2005 11:58 ]


Acties:
  • 0 Henk 'm!

Verwijderd

harald.h. schreef op woensdag 23 november 2005 @ 11:57:
[...]


precies zoals hierboven beschreven, zo is het
sessionid is inderdaad niet uniek
Volgens mij werkt het dan prima met de query van dothack....

Acties:
  • 0 Henk 'm!

Verwijderd

Zo heel lastig is dit probleem niet.
Gedachtengang: selecteer alle producten - ongeacht de producent - van één bestelling (ofwel, van één sessie-ID) en sorteer deze op het veld producent. Loop daarna door de geselecteerde rijen heen en plaats je acties. Dit vertaald zich naar het volgende;

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
// init
$sessionid = 'iets';
$prev_producent = null;
$prod_array = array();

$query =    "
        SELECT
            naam_product,
            producent_naam,
            anzahl
        FROM
            tbl_bestelling
        WHERE
            sessionid = '".$sessionid."'
        ORDER BY
            producent_naam ASC
        ";
$result = mysql_query($query);
while(list($product,$producent,$anzahl)=mysql_fetch_row($result)) {
    
    // new producent if we compare current
    // one with previous one?
    if($prev_producent != null) {
        if($producent != $prev_producent) {
            
            // send mail here with help
            // of the array named `$prod_array`

            // clear array for next line
            // of products
            $prod_array = array();
        }
    }
    
    // put current product in array
    $prod_array[] = array($product,$anzahl);
    
    // store current producent for next loop
    $prev_producent = $producent;
}


Als je de code goed bekijkt zie je precies wat er gebeurd. Elk product wordt opgeslagen in een array. Als de producent van het product een andere is dan de producent van het vorige product, dan worden alle producten die op dat moment in de array staan gemaild, wordt de array geleegd en gaan we weer verder.

Succes.

[ Voor 3% gewijzigd door Verwijderd op 23-11-2005 12:11 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Das gewoon voorkauwen! Maar it does the trick!

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op woensdag 23 november 2005 @ 12:13:
Das gewoon voorkauwen! Maar it does the trick!
Ja euuh volgens mij heb je niet echt iets met de andere tips van ons gedaan?? Zo moeilijk is die code niet, dat had je ook wel zelf kunnen bedenken volgens mij.

Acties:
  • 0 Henk 'm!

  • harald.h.
  • Registratie: Juli 2000
  • Laatst online: 24-01-2023
thnx super,

je kunt het voorkauwen noemen, prima, maar ik ben er geweldig mee geholpen

zat hier al een behoorlijke tijd mee in mijn maag

_/-\o_

[ Voor 91% gewijzigd door harald.h. op 23-11-2005 12:19 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Zoals ivy aangeeft? Daar worden alle resultaten van 1 producent in 1 array gestopt... Als je niet wilt dat we je voorkauwen, moet je die code maar even aanpassen.

Acties:
  • 0 Henk 'm!

Verwijderd

harald.h. schreef op woensdag 23 november 2005 @ 12:16:
thnx super,

je kunt het voorkauwen noemen, prima, maar ik ben er geweldig mee geholpen

zat hier al een behoorlijke tijd mee in mijn maag

_/-\o_
offtopic:
Voorkauwen?! Ik heb toch niet gezegd hoe hij de maíl moet versturen ;) ?


Succes en pleur en sleur niet alleen die code in je projectje, maar probeer er van te leren door er goed naar te kijken en om de code bijvoorbeeld van scratch af aan te herschrijven en door slechts af en toe te spieken naar het voorbeeld dat ik je gaf. Kijken of je het nu ook zelf zou kunnen. Dáár leer je namelijk van, niet van plakken.

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op woensdag 23 november 2005 @ 12:15:
[...]

Ja euuh volgens mij heb je niet echt iets met de andere tips van ons gedaan?? Zo moeilijk is die code niet, dat had je ook wel zelf kunnen bedenken volgens mij.
Ik ben dan ook niet de TS en mijn tip was perfect!!

Acties:
  • 0 Henk 'm!

  • harald.h.
  • Registratie: Juli 2000
  • Laatst online: 24-01-2023
Verwijderd schreef op woensdag 23 november 2005 @ 12:40:
[...]


Ik ben dan ook niet de TS en mijn tip was perfect!!
zekers wel wat mee gedaan, en dit werkt inderdaad perfect
en dank daarvoor

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op woensdag 23 november 2005 @ 12:40:
[...]


Ik ben dan ook niet de TS en mijn tip was perfect!!
Oeps, foutje... Dacht dat het een bericht van de TS was...

[ Voor 15% gewijzigd door Verwijderd op 23-11-2005 12:49 ]

Pagina: 1