login  Naam:   Wachtwoord: 
Registreer je!
 Forum

2 tabellen samenvoegen tot 1

Offline sjony123 - 26/04/2007 19:20
Avatar van sjony123Nieuw lid Ik ben bezig met een spel waar je muntjes kunt verdienen (in php en mysql), maar ben tegen een probleempje aangelopen! Ik wil een winkel maken en heb in de database een tabel van 'winkel' met daarin een kolom 'prijs'.

Alleen nu heb ik nog een tabel 'badges' die ik ook in de winkel wil met ook een kolom 'prijs'.

Nu wil ik op de winkel pagina al die dingen samenvoegen tot één en dan op de prijs laten sorteren! Alleen ik krijg het niet voor elkaar om ze samen te voegen! Heeft iemand idee hoe ik dit moet doen? 

14 antwoorden

Gesponsorde links
Offline marten - 26/04/2007 19:39
Avatar van marten Beheerder JOINS is the magic word ;) genoeg tutorials over te vinden 
Offline sjony123 - 26/04/2007 19:42
Avatar van sjony123 Nieuw lid Ja dat had ik ondertussen ook al gevonden Snap er alleen niks van xD
Offline Rik - 26/04/2007 19:43
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Post anders eens je tabellen structuur, misschien kunnen we je dan een stukje op weg helpen. 
Offline sjony123 - 26/04/2007 19:59
Avatar van sjony123 Nieuw lid Tabel badges:
  1. badge_id | naam | winkel_prijs


Tabel winkel:
  1. product_id | naam | prijs


En dan wil ik dat bijelkaar voegen en dan sorteren op de prijs... (als het moet, kan ik bij de tabel 'badges' de "winkel_prijs" veranderen in "prijs") 
Offline Tony_mortana - 26/04/2007 21:26
Avatar van Tony_mortana PHP interesse query ongeveer dit:

  1. $query = "
  2. SELECT badges.badge_id, winkel.naam
  3. FROM badges
  4. INNER JOIN winkel
  5. ON badges.naam = winkel.naam
  6. ORDER BY prijs
  7. ";


Deze vult badges aan waar de collom badges.naam gelijk is aan winkel.naam
Kan natuurlijk ook andere collomen nemen die dezelfde waardes hebben!
Offline Ultimatum - 26/04/2007 21:37
Avatar van Ultimatum PHP expert @tony, de velden na on moeten tussen haakjes
Offline Tony_mortana - 26/04/2007 21:49 (laatste wijziging 26/04/2007 21:49)
Avatar van Tony_mortana PHP interesse na ON ?

Nee hoor, volgens vandenBulcke niet! 

Maar zal idd met haakjes vast werken 

Weet alleen niet of die ORDER BY goed werkt!
heb het ook maar ff uit me hoofd gedaan, zo
ingewikkeld is het ook niet!
Offline tbk - 26/04/2007 21:55
Avatar van tbk PHP beginner als aanvulling, je moet ook nog aanduiden dat het over winkel.prijs gaat als je ORDER BY doet dacht ik
Offline Tony_mortana - 27/04/2007 10:50
Avatar van Tony_mortana PHP interesse IDD, maar de query zal wel werken!

maar om het netjes te maken zal overal wel de tabelnaam voor moeten staan!
Dit is idd ook nodig als je dezelfde collomnamen heb ik verschillende tabellen, zoals bij jou 2x naam!
Mooiste is nog als je dubelle collomnamen een andere naam geeft achter select, kan je ze in PHP beter uit elkaar houden later.

Zoals: SELECT winkel.naam AS naampy, badges.naam AS naaaaam
Offline sjony123 - 27/04/2007 18:49 (laatste wijziging 27/04/2007 18:55)
Avatar van sjony123 Nieuw lid Ehh, nu geeft ie helemaal geen rijen meer aan... :s

Maar kan dit zo wel (met dat mysql_fetch_array enzo)

  1. <?php
  2. $query = mysql_query("SELECT badges.badge, winkel.naam
  3. FROM badges
  4. INNER JOIN winkel
  5. ON badges.naam = winkel.naam");
  6.  
  7. while($rij = mysql_fetch_array($query) {
  8. echo $rij["naam"]." - ".$rij["prijs"]."<br>";
  9. }
  10.  
  11. ?>


btw , die 'badges_id' heet 'badge' (was ff vergeten )

< dus zo wil ik en alle rijen uit de tabel 'winkel' en alle rijen uit de tabel 'badges' laten weergeven en dan alle dingen weer op prijs gesorteerd... (ff voor de duidelijkheid.. )
Offline Rik - 28/04/2007 09:51
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Je bedoelt dus dat je alle artikelen uit badges én uit winkel op wilt halen en sorteren?

Volgens mij heb je dan niet echt veel aan een join...

Ik weet ook niet hoe je de resultaten achter elkaar kunt plakken en dan ook nog sorteren, ik weet ook niet of dat wel kan. Ik heb even gezocht maar ik kan nog niets vinden, het gaat allemaal over joins. 

Je zou het wel in php op kunnen lossen, maar dat wordt waarschijnlijk niet heel erg snel... Dan moet je het per tabel ophalen en dan in php gaan sorteren.

Het is wrs makkeiljker op te lossen door je tabellen te normaliseren. Je maakt dan een tabel:
"products" met de volgende velden:
- id
- name
- price
- cat
En van cat maak je een enum veld waar "winkel" of "badges" oid in kan staan. Als je dat nog verder wilt normaliseren kan je daar ook weer tabel voor maken met verschillende categorieën, maar dat is in jouw geval wrs niet echt nodig.

Met een simpel scriptje kan je dan de bestaande gegevens overzetten naar de nieuwe tabel. 

Als ik jou was zou ik dat eens proberen. Dat zal je in de toekomst nog veel moeite besparen als je systeem steeds groter wordt! 

Succes ermee!
Offline Tony_mortana - 28/04/2007 17:01
Avatar van Tony_mortana PHP interesse Lekker bezig hoor!

Je kan ook even kijken bij de w3school site, die leggen het simpel uit
allemaal wat de basis dingen zijn van sql query's.

En alles kan je sorteren in een query, dus INNER JOIN ook!

Nu raad ik je aan om wel te normaliseren, maar daarin niet te diep
te gaan omdat vaak database programmeurs vergeten dat het ook
gebruikt moet worden 
Dus doe het niet extreem het normaliseren zoals mijn database leraar doet, die weet van 1 tabbel soms wel 100 tabellen te maken!
En dan blijf je JOINEN dat als resultaat heeft dat he overaicht kwijt raakt!

De query ziet er goed uit trouwens, maar voor de zekerheid kan je
AS gebruiken zodat je zeker weet de juiste tabel naam te hebben.
Anders geef je de database een vije wil om collom namen te geven,
meestal geven ze gewoon de attribuutnaam zelf maar als er een dubbele is gaat hij trippen 

EN TROUWENS, ik zie dat je prijs wilt weergeven?
Maar die staat NIET in je select, dus wordt ook niet opgehaald!

  1. <?php
  2. $query = mysql_query("SELECT badges.badge AS badge, winkel.naam AS naampy
  3. FROM badges
  4. INNER JOIN winkel
  5. ON badges.naam = winkel.naam");
  6.  
  7. $resultaat = mysql_query($query) or die(mysql_error());
  8.  
  9. while($rij = mysql_fetch_object($resultaat) {
  10. echo $rij->naampy." - ".$rij->badge."<br>";
  11. }
  12.  
  13. ?>
Offline sjony123 - 29/04/2007 00:25 (laatste wijziging 29/04/2007 00:27)
Avatar van sjony123 Nieuw lid Ja, ik doe altijd SELECT * FROM, maar ik had die query ff overgekopierd..

Iemand anders zei ook al dat ik gewoon alles in één tabel moet doen, en dat ga ik misschien ook doen! Ik vraag zelf ook af of het wel wil wat ik wil  En ik kom ook steeds bij 'JOIN' terecht, en omdat ik daar niks van af weet, doe ik toch alles maar in één tabel (moet wel gedeelte van m'n systeem weer ombouwen )

Iedereen die me geholpen heeft: hartelijk bedankt!:!: 

EDIT: Ik zit nu net die code van Tony_mortana nog eens goed te bekijken, maar ik zie nu dat daar dubbele 'AS'en in zitten enzo ! die zal ik morgen ook nog ff uitproberen..
Offline Tony_mortana - 29/04/2007 11:41
Avatar van Tony_mortana PHP interesse Je kan beter NIET SELECT * gebruiken bij een Inner join!

Omdat je nooit weet hoe de database de colom namen zijn.

Dus benoem elke colom gewoon, dan krijg je iedergeval een resultaat! ff wat meer werk, maar dan heb je ook wel wat 
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.208s