login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[PHP AND Mysql] Klein query vraagje

Offline Speedy24 - 30/10/2006 15:44 (laatste wijziging 30/10/2006 15:45)
Avatar van Speedy24Nieuw lid Ik heb in mijn database een tabel: leden
Daarin staat een veld: gekochte_downloads

Daarin staat bijvoorbeeld: 4,6, (dit zijn de ID's van de downloads)

Mijn vraag is, hoe kan ik die id's in een query zetten?
Want ik wil laten zien, wat ze al hebben gekocht...

Ik gebruik nu:

  1. $db4 = mysql_fetch_object(mysql_query("SELECT gekochte_tutorials, gekochte_downloads FROM leden WHERE Gebruikersnaam = '" . $InlogLid->Gebruikersnaam . "'"));
  2. $db5 = mysql_query("SELECT * FROM downloads WHERE ID = '" . $db4->gekochte_downloads . "'");
  3. while($bekijk = mysql_fetch_object($db5)){
  4. echo $bekijk2->naam;
  5. }

Met als resultaat, dat hij alleen de eerste eruithaalt

5 antwoorden

Gesponsorde links
Offline Rens - 30/10/2006 16:06
Avatar van Rens Gouden medaille

Crew algemeen
Eerst exploden op een komma (PHP.net: explode)
Daarna met een for loopje door de array heen lopen en de queries uitvoeren.
Offline raza - 30/10/2006 16:40
Avatar van raza HTML beginner Volgens de principes van datanormalisatie kan zoiets niet. Een veld in een tabel kan maar naar één gegeven verwijzen. Een veld moet dus atomair zijn.

In principe moet je dus een extra tabel aanmaken die het id van de user en het id van de download bijhoudt (samengestelde sleutel op beide velden).

Als dit eventueel te zwaar zou zijn voor de efficientie van je project, kan je denormalisatie doen door de ids in één veld bij te houden. Maar dat valt af te raden.
Offline Thomas - 30/10/2006 16:42 (laatste wijziging 30/10/2006 16:42)
Avatar van Thomas Moderator Netter zou zijn om hier een koppeltabel van te maken, maar als je alle gekochte downloads in één kolom wilt opslaan dan kan dat.

Moet je wel op 2 dingen letten:
1. Als je kolom VARCHAR is, is je ruimte beperkt (255 karakters), dus als iemand op een gegeven moment veel gekochte_downloads heeft dan kan dit voor problemen gaan zorgen. Misschien is het beter om voor het type van deze kolom gebruik te maken van TEXT (als je dit al niet deed).

2. Je kunt bij textuele kolommen géén gebruik maken van IN - wat je hier wilt doen waarschijnlijk? Kijken of een bepaalde gekochte download voorkomt in een rij van gekochte downloads.

Stel dat gekochte_downloads '4,6' bevat, dan levert het volgende 1 (true) op:

  1. SELECT 4 IN(gekochte_downloads)


Maar het het volgende levert false!!!

  1. SELECT 6 IN(gekochte_downloads)


Dit komt waarschijnlijk omdat IN alleen werkt met numerieke waarden, en alles na de (eerste) komma als troep beschouwt.

De oplossing voor dit probleem is het aanleggen van een koppeltabel, of een andere (eenvoudigere) oplossing waarbij je gebruik kunt blijven maken van een comma-separated tekst-kolom. Deze oplossing kun je van me kopen  .
Offline Dark_Paul - 30/10/2006 16:42
Avatar van Dark_Paul PHP ver gevorderde Wat misschien verstandiger is (als dat niet te veel werk meer is nu) is een nieuwe tabel aanmaken, bijv. gekochte_downloads. Hierin sla je het gekochte product op, en wie het heeft gekocht, dus:
+ gekochte_downloads +
+ id | memid | productid +
+ 1 | 4 | 5 +
Dan haal je op met in je query WHERE memid='".$memid."' ($memid is het id van het desbetreffende lid).
Dan haal je vervolgens met het productid de goede productnaam uit een tabel producten.
Offline Speedy24 - 31/10/2006 11:03
Avatar van Speedy24 Nieuw lid Als eerste bedankt voor de reacties....

Het proces is nog niet zo groot, dat dit heel veel werk oplevert, als ik veel dingen moet wijzigen, omdat hij ook nog niet online staat...

Wat bij mij waarschijnlijk het makkelijkst zal zijn is het idee van Dark_Paul.

Dit moet me vast wel lukken, zie het probleem in iedergeval nu niet 

Nogmaals hartelijk dank allemaal . 

Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.19s