Toon posts:

[php+mysql] 2 tabellen 1 gesorteerde array

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb 2 tabellen: prospect en relatie
de prospect tabel bevat de gegevens van de door de 'klant' ingevoerde gegevens. De relatie tabel is een 'schaduwtabel' waarin door het sales team aangevulde gegevens staan.

Nu wil ik een overzicht maken gesorteerd op o.a. achternaam waarbij de prospects die een gekoppelde relatie hebben met de gegevens uit de relatietabel in de sortering komen. (is dit te volgen?)

Hoe kan ik dit het beste aanpakken? Volgens mij is er geen query te maken die direct checkt of de prospect aan een relatie is gekoppeld en dan deze gegevens direct ophaalt?

Kan ik dit het beste doen via meerdere arrays die daarna samengevoegd moeten worden en gesorteerd worden op bijvoorbeeld achternaam? Kun je multidimensionale arrays eigenlijk makkelijk sorteren?

wie o wie kan zijn lichtje laten schijnen over mijn idee?

  • 0528973
  • Registratie: Juni 2003
  • Laatst online: 15-05-2013
Ik weet niet exact hoe je tabellen in elkaar steken en ik weet niet precies wat voor
database engine je gebruikt.

Maar misschien kan je eens kijken naar sql joins daarom plak ik hier ook gewoon een willekeurige link waar dit een beetje in wordt besproken(http://www.databasejournal.com/sqletc/article.php/1402351)

In het kort, als je in je schadowtabel een verwijzing hebt staan dmv een foreign key naar je prospects tabel dan kan je dit gewoon met een hele simpele query doen.

je query zal dan ongeveer zoiets worden:
SELECT prospects.*, schaduwtabel.* FROM prospect INNER JOIN schaduwtabel ON prospects.foreignkey = shaduwtabel.key ORDER BY prospects.achternaam

suc6

[ Voor 50% gewijzigd door 0528973 op 03-03-2004 11:03 ]

Pascal


Verwijderd

Topicstarter
maar laat ie dan niet alle prospects weg die niet aan een relatie gekoppeld zijn?
ik ga het eens proberen :)

  • 0528973
  • Registratie: Juni 2003
  • Laatst online: 15-05-2013
in dat voorbeeld van mij wel, wil je alle prospects met eventueel hun gekoppelde gegevens in je schaduwtabel dan wil je waarschijnlijk een left join gebruiken.

Maar lees je gewoon ff in SQL in ;) dan kom je erachter wat je nog meer met dit soort dingen kan...

Pascal


Verwijderd

Topicstarter
thnx! af en toe zou ik echt graag ff een operator een belletje geven om wat funky shit te uploaden! :+

Verwijderd

Topicstarter
nou kom ik er toch nog niet helemaal uit :D

PHP:
1
2
3
4
5
6
7
SELECT 
p.prospect_voornaam, p.prospect_tussenvoegsel, p.prospect_achternaam as achtermaam, p.prospect_bedrijfsnaam, relatie.relatie_voornaam, relatie.relatie_tussenvoegsel, relatie.relatie_achternaam as achternaam, relatie.relatie_bedrijfsnaam
FROM prospect as p
LEFT JOIN relatie ON p.relatie_id = relatie.relatie_id 
ORDER BY  
IF( relatie.relatie_achternaam <> '', relatie.relatie_achternaam, p.prospect_achternaam ),
IF( p.prospect_achternaam = '' AND relatie.relatie_achternaam = '', 'ZZZZ', p.prospect_achternaam ) ASC


ik wil de resultaten zo orderen dat de 'relaties' tussen de prospects komen op achternaam gesorteerd. De relatieachternaam overruled dan de prospectachternaam. Kan dit?

update:
okee het begint erop te lijken, alleen komen nu niet de prospects zonder achternaam en zonder relatie onderaan... deze moeten 'ZZZZ' als achternaam krijgen...

[ Voor 34% gewijzigd door Verwijderd op 03-03-2004 12:25 ]


  • Skaah
  • Registratie: Juni 2001
  • Niet online
Kun je niet null gebruiken ipv ''?

[ Voor 100% gewijzigd door Skaah op 03-03-2004 13:33 ]


Verwijderd

Topicstarter
nee de velden zijn niet NULL maar '', er wordt standaard een lege string opgeslagen ipv NULL

mag de bovenstaande dubbele if eigenlijk wel en doet het ook wat ik denk dat het doet? Wat ik denk (hoop) dat het doet is eerst alle niet lege relatie_achternamen als prospect_achternaam zetten en vervolgens alle lege prospect_achternamen vervangen door 'ZZZZ' in de order by.

[ Voor 63% gewijzigd door Verwijderd op 03-03-2004 13:37 ]


Verwijderd

Topicstarter
code:
1
2
3
4
5
6
SELECT 
IF( relatie.relatie_achternaam <> '', relatie.relatie_achternaam, 'ZZZZ' ) as test, IF( p.prospect_achternaam <> '',p.prospect_achternaam, 'ZZZZ' ) as test2, p.prospect_voornaam, p.prospect_tussenvoegsel, p.prospect_achternaam, p.prospect_bedrijfsnaam, relatie.relatie_voornaam, relatie.relatie_tussenvoegsel, relatie.relatie_achternaam, relatie.relatie_bedrijfsnaam
FROM prospect as p
LEFT JOIN relatie ON p.relatie_id = relatie.relatie_id 
ORDER BY  
test, test2 asc

Ik heb nu in de test alle relatie en prospect namen goed staan, maar hoe krijg ik hier een goede sortering uit op zowel prospect_achternaam als relatie_achternaam ... :'(

[ Voor 12% gewijzigd door Verwijderd op 03-03-2004 15:12 ]

Pagina: 1