Toon posts:

[mysql] Joins*

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hey

Ik heb twee tabellen: eentje met de naam: Adressen (NAW gegevens), de andere Interesses ( Id, Omschrijving).

Nu wil ik uit "Adressen" selecteren mensen met een of meerdere Interesses.
Om de koppeling te maken bij het opslaan heb ik een nieuwe tabel gecreerd: AdressenInteresses:

code:
1
adressen_id | interesse_id


Als ik een Join maak tussen Adressen en AdressenInteresses en join op adressen_id dan pakt hij hem niet, terwijl er wel records zijn met de geselecteerde AdressenInteresses.interesse_id

adressen_id kan daar dus meerdere malen in voorkomen!


Mn sql wordt dan dit (namen zijn anders :*) )
code:
1
2
3
4
5
6
7
8
9
SELECT a.* FROM 
adressen AS a
LEFT JOIN 
AdressenInteresses AS i ON i.adressen_id = a.id 
WHERE 
 a.site_id = '%' 
AND (i.interesse_id = '1' )
ORDER BY 
a.achternaam LIMIT 0,200


Ik kom er niet uit :S Iemand?

[ Voor 11% gewijzigd door Verwijderd op 25-07-2003 23:01 ]


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Wat doet die a.site_id = '%' ?

En wil je niet gewoon zoiets:
SQL:
1
2
3
4
SELECT a.* 
FROM adressen a, AdressenInteresses i
WHERE i.adressen_id = a.id AND i.interesse_id = 1
ORDER BY a.achternaam LIMIT 0,200

Verwijderd

Topicstarter
site_id is een extra voorwaarde. Bij % geeft ie alles weer had ik ontdekt, vandaar :)

Met php krijg ik nu trouwens de waarden er niet uit. (via fetch_object). Werkt dat nu anders?

Voor rest werkt het volgens mij wel.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Verwijderd schreef op 25 juli 2003 @ 23:15:
site_id is een extra voorwaarde. Bij % geeft ie alles weer had ik ontdekt, vandaar :)
Euhm, dat is dan een overbodige toevoeging, want als je geen "voorwaarden" opgeeft, krijg je ze sowieso allemaal.

Echter is het met = '%' niet alle waarden, maar alleen diegenen die daadwerkelijk een % als site_id hebben, en dat lijkt me niet een...
Gewoon weglaten dus.
Met php krijg ik nu trouwens de waarden er niet uit. (via fetch_object). Werkt dat nu anders?
Nee, fetch_object werkt niet anders dan andere functies ervoor, maar je moet het wel goed gebruiken natuurlijk :)

Verwijderd

Topicstarter
ACM schreef op 25 July 2003 @ 23:18:
[...]

Echter is het met = '%' niet alle waarden, maar alleen diegenen die daadwerkelijk een % als site_id hebben, en dat lijkt me niet een...
Gewoon weglaten dus.

[...]
Die waarde komt uit een selectbox. Het leek me wel makkelijk om dat dan zonder extra if-clause op te lossen op deze manier ;) Maja, tenks!

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 17:28

alienfruit

the alien you never expected

Hmm. Ik heb gewoon een extra tabel gemaakt a la:

userid interests1 interests2 interests3 knowledge shop_id custom_interests custom_knowledge

Waarbij de gebruiker dus zijn drie intresses (tja ze wilde er maar drie weten :?) knowledge (= waar ken je ons van? combobox waarde) en shop_id reference naar de shops tabel verder twee velden voor het opslaan "overige" waarde voor intresse en "waar ken je ons van?"..

Vinden jullie dit ontwerp kunnen of niet? (vind um zelf niet echt denderend) Ik koos voor deze methode omdat op de web-site bijna elka dag wel nieuwe intresses en/of verwijderen (klant weet niet wat ie wil).

[ Voor 6% gewijzigd door alienfruit op 25-07-2003 23:51 ]


Verwijderd

Topicstarter
Mja, dat kon bij mij niet. Was expliciet gezegd dat die interesses te wijzigen moeten zijn dus moet hij echt zo. Als je weet dat het er 3 zijn en die niet veranderen (Bijv je vinkt interesse 1 aan, en die eerst "Mooie vrouwen" is, maar daarna "Mooie mannen"genoemd word, dan zit je wel met een probleem. Zo niet dat kan dat ook wel. Al werkt het nu bij mij ook goed, behalve dat ik het niet kan uitlezen.

PHP:
1
2
3
4
5
6
7
8
9
    $sql_select2 = "
                    SELECT a.voornaam , a.achternaam 
                    FROM adressen AS a, userinteresse AS i
                    WHERE i.adressen_id = a.id AND i.interesse_id = '2'
                    ORDER BY a.achternaam LIMIT 0,200
";                      
while ($row = mysql_fetch_array($result)) {
                            echo $row['a.voornaam'] . " RECORD! " ."<br>";
                        }


Zegt ie wel: Record! maar niet de voornaam. Hoe kan dat? (ik die wel mysql_query hoor, maar dat heb ik even weggelaten)

[ Voor 14% gewijzigd door Verwijderd op 25-07-2003 23:58 . Reden: Ben niet helder :) Zo op vakantie :D ]


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

veld heet 'voornaam' niet 'a.voornaam'

print_r($row) is je vriend.

  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
Waarom zet je quotes rond een numeriek veld? Dat mag je helemaal niet doen, anders beschouwt de databank dat als een alfanumerieke waarde.
(Ik ga er toch van uit dat interesse_id numeriek is).

https://fgheysels.github.io/


  • _Sunnyboy_
  • Registratie: Januari 2003
  • Laatst online: 14-01 22:23

_Sunnyboy_

Mooooooooooooooooo!

whoami schreef op 26 July 2003 @ 09:02:
Waarom zet je quotes rond een numeriek veld? Dat mag je helemaal niet doen, anders beschouwt de databank dat als een alfanumerieke waarde.
(Ik ga er toch van uit dat interesse_id numeriek is).
Mag best hoor, en is ook best handig om SQL-inserts te voorkomen. Je moet dan alleen geen 01 tussen quotes gaan zetten want '01' != '1'

Nealz-> Heb je al eens echo $row['voornaam'] geprobeerd? (dus zonder a.)
Ik weet niet of (a.) niet mag, maar het is in ieder geval niet nodig
edit: doh dat zei ACM ook al

[ Voor 24% gewijzigd door _Sunnyboy_ op 26-07-2003 10:01 ]

Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life


Verwijderd

_Sunnyboy_ schreef op 26 July 2003 @ 09:59:

Mag best hoor, en is ook best handig om SQL-inserts te voorkomen. Je moet dan alleen geen 01 tussen quotes gaan zetten want '01' != '1'
Als je ergens een integer nodig hebt, kun je veel beter de variabele expliciet casten naar een integer.

Verwijderd

'option explicit' zou wel een prettige aanvulling in PHP zijn... :)

  • bigtree
  • Registratie: Oktober 2000
  • Laatst online: 07-07 11:51
Verwijderd schreef op 26 July 2003 @ 14:21:
'option explicit' zou wel een prettige aanvulling in PHP zijn... :)
Ik was juist zo blij met wat ze in php 'type juggling' noemen. :)

Lekker woordenboek, als je niet eens weet dat vandalen met een 'n' is.

Pagina: 1