[PHP&MySQL] Probleem met query / code

Pagina: 1
Acties:

  • TheovdS
  • Registratie: Oktober 2004
  • Laatst online: 02:12
Goede middag, :) (ff slijmen :+ )

Ik heb een probleem:

Tabellen

code:
1
2
3
4
5
6
    afrekeningen
    ------------------
    afrekening_id
    afrekening_datum
    afrekening_medewerker
    afrekening_boer


code:
1
2
3
4
5
6
7
8
    personen
    -------------
    persoon_id
    persoon_voorletters
    persoon_achternaam
    persoon_naw
    enz.
    persoon_soort (boer, medewerker en contactpersoon)



Relaties
afrekening.afrekening_boer => personen.persoon_id WHERE persoon_soort = 'boer'
afrekening.afrekening_medewerker => personen.persoon_id WHERE persoon_soort = 'medewerker'

PHP & SQL
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$db->sql_handle('SELECT
                           afrekening.afrekening_boer,
                           afrekening.afrekening_medewerker,        

                           personen.persoon_voorletters,
               personen.persoon_tussenvoegsel,
               personen.persoon_achternaam,
            FROM afrekening             
            INNER JOIN personen
               ON (ophaal.ophaal_boer = personen.persoon_id)
                        INNER JOIN personen
               ON (ophaal.ophaal_medewerker = personen.persoon_id)');

while($var = $db->sql_result()) {
  echo 'boer: ' .$var->persoon_id;
  echo 'medewerker: ' .$var->persoon_id;
}


Probleem
Bovenstaande code werkt dus niet, omdat ik 2 keer gegevens uit de tabel 'personen' wil halen. En ik wil die 2 keer 'echoen' d.m.v. '$var->persoon_id'.

Heeft iemand een idee hoe ik dit op kan lossen?

[ Voor 7% gewijzigd door TheovdS op 16-03-2006 14:09 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 09:56
aliassen gebruiken.
select * from tabel1 as a
inner join tabel1 as b on ...

https://fgheysels.github.io/


  • TheovdS
  • Registratie: Oktober 2004
  • Laatst online: 02:12
Heb ik zo'n mooie TS gemaakt, geef jij een reply van 3 regels :P

Kun je het misschien een beetje verduidelijken?

Verwijderd

Zoals hij zegt moet je dus aliassen voor de tabel namen gebruiken.

  • Morpheus_at_work
  • Registratie: December 2000
  • Laatst online: 09-02 23:41
bij database kun je een tabel recyclen , door hem een alias te geven kortom virtuele andere naam

bv Select a.* from wachtlijst_informatie_dim A left join wachtlijst_fact b on a.WachtlijstID = b.WachtlijstID

waarbij je wachtlijst_informatie_dim A noemt en wachtlijst_fact B noemt

maar dat kun je dus ook doen met de tabellen en die 2 x gebruiken

iets met lenzen


  • Cloud
  • Registratie: November 2001
  • Laatst online: 18-02 09:57

Cloud

FP ProMod

Ex-moderatie mobster

whoami schreef op donderdag 16 maart 2006 @ 14:10:
aliassen gebruiken.
select * from tabel1 as a
inner join tabel1 as b on ...
Moet je voor de tabelnamen ook 'AS' gebruiken, dat geld toch alleen voor veldnamen? In elk geval, hier een stukje code om het principe te verduidelijken:
SQL:
1
2
3
4
SELECT region, name, population FROM bbc x
  WHERE population >= ALL
    (SELECT population FROM bbc y
        WHERE y.region=x.region)

Zoals je ziet, 2 keer de tabel bbc, maar de ene 'instantie' wordt x genoemd en de andere y. Zo kun je toch met gegevens uit beide werken :)

[ Voor 3% gewijzigd door Cloud op 16-03-2006 21:39 ]

Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana


  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 12:12
wolkje schreef op donderdag 16 maart 2006 @ 21:39:
[...]
Moet je voor de tabelnamen ook 'AS' gebruiken, dat geld toch alleen voor veldnamen? In elk geval, hier een stukje code om het principe te verduidelijken:
Je hoeft niet per se 'AS' te gebruiken voor tabelnamen. Je hoeft ook niet per se backticks om tabel- of veldnamen te zetten (tenzij het om een gereserveerd woord gaat) en je hoeft INNER JOINs ook niet expliciet te gebruiken. Als je het structureel toepast worden je queries echter wel beter leesbaar en makkelijker aan te passen.

Regeren is vooruitschuiven


  • maartenba
  • Registratie: November 2001
  • Laatst online: 29-07-2024
Kom je hier niet een eindje mee?

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
<? 
$db->sql_handle('SELECT 
                           a.afrekening_boer AS boer_id, 
                           a.afrekening_medewerker AS medewerker_id,         

                           pb.persoon_voorletters AS boer_voorletters, 
                        pb.persoon_tussenvoegsel AS boer_tussenvoegsel, 
                           pb.persoon_achternaam AS boer_achternaam, 

                           pm.persoon_voorletters AS medewerker_voorletters, 
                        pm.persoon_tussenvoegsel AS medewerker_tussenvoegsel, 
                           pm.persoon_achternaam AS medewerker_achternaam

            FROM afrekening AS a 
               
            INNER JOIN personen AS pb 
               ON (ophaal.ophaal_boer = pb.persoon_id) 

            INNER JOIN personen AS pm
               ON (ophaal.ophaal_medewerker = pm.persoon_id)'); 

while ($var = $db->sql_result()) { 
  echo 'boer: ' .$var->boer_id; 
  echo 'medewerker: ' .$var->medewerker_id; 
} 
?>

  • Cloud
  • Registratie: November 2001
  • Laatst online: 18-02 09:57

Cloud

FP ProMod

Ex-moderatie mobster

T-MOB schreef op vrijdag 17 maart 2006 @ 01:20:
[...]
Je hoeft niet per se 'AS' te gebruiken voor tabelnamen. Je hoeft ook niet per se backticks om tabel- of veldnamen te zetten (tenzij het om een gereserveerd woord gaat) en je hoeft INNER JOINs ook niet expliciet te gebruiken. Als je het structureel toepast worden je queries echter wel beter leesbaar en makkelijker aan te passen.
Ik denk dat je mij verkeerd begrepen hebt; mijn reactie was geheel niet negatief bedoeld hoor :) Ik begrijp heus dat dat soort dingen de leesbaarheid vergroten. Ik wist gewoon niet dat 'AS' gebruikt kon worden voor tabelnamen :) Al die andere dingen zijn hartstikke logisch...

Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana


  • TheovdS
  • Registratie: Oktober 2004
  • Laatst online: 02:12
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SELECT 
                    ophaal.ophaal_datum,
                    ophaal.ophaal_boer,
                    ophaal.ophaal_melkrijder,
                                        
                    persoon_boer.persoon_voorletters AS boer_voorletters,
                    persoon_boer.persoon_tussenvoegsel AS boer_tussenvoegsel,
                    persoon_boer.persoon_achternaam AS boer_achternaam,
                    
                    persoon_melkrijder.persoon_voorletters AS melkrijder_voorletters,
                    persoon_melkrijder.persoon_tussenvoegsel AS melkrijder_tussenvoegsel,
                    persoon_melkrijder.persoon_achternaam AS melkrijder_achternaam 
                FROM ophaal
                
                INNER JOIN personen AS persoon_boer
                    ON (ophaal.ophaal_boer = personen.persoon_id)
                
                INNER JOIN personen AS persoon_melkrijder
                    ON (ophaal.ophaal_melkrijder = personen.persoon_id)


PHP:
1
2
echo $var->boer_achternaam;
echo $var->melkrijder_achternaam;

Zo moet het dus ongeveer worden. Hij doet et niet > verder kom ik niet :(
Kan iemand mij vertellen hoe het moet?

TNX _/-\o_

[ Voor 62% gewijzigd door TheovdS op 21-03-2006 12:57 ]


  • TheovdS
  • Registratie: Oktober 2004
  • Laatst online: 02:12
Dus ik wil boeren & melkrijders uit 1 tabel halen en weergeven...
Iemand een idee?

offtopic:
In de TS gaat het over boeren & medewerkers, maar het principe is hetzelfde.

  • whoami
  • Registratie: December 2000
  • Laatst online: 09:56
Ik denk dat je zal moeten OUTER joinen.
Eén van je 2 velden waar je op joined zal wellicht null zijn, vandaar.
Lees anders eens een stukje over joins in een sql tutorial. (Zie de P&W FAQ, daar hebben we geloof ik een stukje over).

[ Voor 19% gewijzigd door whoami op 22-03-2006 12:23 ]

https://fgheysels.github.io/


  • TheovdS
  • Registratie: Oktober 2004
  • Laatst online: 02:12
whoami schreef op woensdag 22 maart 2006 @ 12:21:
Ik denk dat je zal moeten OUTER joinen.
Eén van je 2 velden waar je op joined zal wellicht null zijn, vandaar.
Lees anders eens een stukje over joins in een sql tutorial. (Zie de P&W FAQ, daar hebben we geloof ik een stukje over).
Welk veld zou dan leeg moeten zijn?

In het veld personen.persoon_soort staat, óf boer, óf melkrijder.

BTW:
Ik dacht dat ik met de volgende code wel zou lukken, niet dus :(
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT *,

                    melkrijders.persoon_voorletters AS melkrijder_voorletters,
                    melkrijders.persoon_tussenvoegsel AS melkrijder_tussenvoegsel,
                    melkrijders.persoon_achternaam AS melkrijder_achternaam                          

                 FROM ophaal
                 
                 INNER JOIN personen
                    ON (ophaal.ophaal_boer = personen.persoon_id)
                    
                 INNER JOIN personen AS melkrijders
                    ON (ophaal.ophaal_melkrijder = melkrijders.persoon_id) 

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 16-01 10:59

thomaske

» » » » » »

Kijk eens naar de errormeldingen die MySQL produceert.. daar kan je meestal al wel het eea uithalen.

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • TheovdS
  • Registratie: Oktober 2004
  • Laatst online: 02:12
thomaske schreef op maandag 27 maart 2006 @ 22:42:
Kijk eens naar de errormeldingen die MySQL produceert.. daar kan je meestal al wel het eea uithalen.
Ik krijg helemaal geen errors, hij laat gewoon niets zien.

  • StevenK
  • Registratie: Februari 2001
  • Laatst online: 11:06
TheovdS schreef op dinsdag 28 maart 2006 @ 09:17:
[...]

Ik krijg helemaal geen errors, hij laat gewoon niets zien.
Voor dan die query eens rechtstreeks in mysql uit ?

Was advocaat maar vindt het juridische nog steeds leuk. Doet tegenwoordig iets in de metaal.


  • whoami
  • Registratie: December 2000
  • Laatst online: 09:56
TheovdS schreef op maandag 27 maart 2006 @ 20:16:
[...]

Welk veld zou dan leeg moeten zijn?

In het veld personen.persoon_soort staat, óf boer, óf melkrijder.

BTW:
Ik dacht dat ik met de volgende code wel zou lukken, niet dus :(
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT *,

                    melkrijders.persoon_voorletters AS melkrijder_voorletters,
                    melkrijders.persoon_tussenvoegsel AS melkrijder_tussenvoegsel,
                    melkrijders.persoon_achternaam AS melkrijder_achternaam                          

                 FROM ophaal
                 
                 INNER JOIN personen
                    ON (ophaal.ophaal_boer = personen.persoon_id)
                    
                 INNER JOIN personen AS melkrijders
                    ON (ophaal.ophaal_melkrijder = melkrijders.persoon_id) 
Ik zeg dat je ws moet outer joinen.
Geef eens een voorbeeld van hoe een rij in de tabel ophaal er uit ziet. Waarschijnlijk is voor sommige rijen ophaal_boer niet ingevuld, en voor andere ophaal_melkrijder niet ingevuld.

https://fgheysels.github.io/


  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 16-01 10:59

thomaske

» » » » » »

TheovdS schreef op dinsdag 28 maart 2006 @ 09:17:
[...]

Ik krijg helemaal geen errors, hij laat gewoon niets zien.
Probeer dan je errors eens te achterhalen met mysql_error()

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


  • TheovdS
  • Registratie: Oktober 2004
  • Laatst online: 02:12
thomaske schreef op dinsdag 28 maart 2006 @ 10:06:
[...]


Probeer dan je errors eens te achterhalen met mysql_error()
Jaja, inderdaad; met mysql_error & mysql_erno, maar ik krijg geen errors.

Edit:
Ik heb 2 tabellen:

Tabellen

code:
1
2
3
4
5
6
    afrekeningen
    ------------------
    afrekening_id
    afrekening_datum
    afrekening_medewerker
    afrekening_boer


code:
1
2
3
4
5
6
7
8
    personen
    -------------
    persoon_id
    persoon_voorletters
    persoon_achternaam
    persoon_naw
    enz.
    persoon_soort (boer, medewerker en contactpersoon)



Relaties
afrekening.afrekening_boer => personen.persoon_id WHERE persoon_soort = 'boer'
afrekening.afrekening_medewerker => personen.persoon_id WHERE persoon_soort = 'medewerker'

PHP & SQL
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$db->sql_handle('SELECT
                           afrekening.afrekening_boer,
                           afrekening.afrekening_medewerker,        

                           personen.persoon_voorletters,
               personen.persoon_tussenvoegsel,
               personen.persoon_achternaam,
            FROM afrekening             
            INNER JOIN personen
               ON (ophaal.ophaal_boer = personen.persoon_id)
                        INNER JOIN personen
               ON (ophaal.ophaal_medewerker = personen.persoon_id)');

while($var = $db->sql_result()) {
  echo 'boer: ' .$var->persoon_naam;
  echo 'medewerker: ' .$var->persoon_naam;
}


Probleem
Bovenstaande code werkt dus niet, omdat ik 2 keer gegevens uit de tabel 'personen' wil halen. En ik wil die 2 keer 'echoen' d.m.v. '$var->persoon_naam'.

Heeft iemand een idee hoe ik dit op kan lossen?

[ Voor 74% gewijzigd door TheovdS op 28-03-2006 10:39 ]

Pagina: 1