login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Joins

Offline lasdesigner - 29/09/2006 16:13
Avatar van lasdesignerPHP beginner Hallo, ik ben bezig met een Join query:

Tabellen:
Auto
- Id
- Waarde (totaal)
- Naam
Garage
- Id
- Lid_id
- Auto_id
- Schade

Ik wil de totale waarde van alle auto's weten. Ik heb dit zo gedaan:
  1. SELECT
  2. garage.id,
  3. garage.schade
  4. auto.waarde
  5. FROM
  6. garage
  7. INNER JOIN
  8. auto
  9. ON
  10. (garage.auto_id = auto.id)
  11. WHERE
  12. lid_id = 1


Maar doet het niet, kan iemand mij helpen?

17 antwoorden

Gesponsorde links
Offline Wijnand - 29/09/2006 16:20 (laatste wijziging 29/09/2006 16:21)
Avatar van Wijnand Moderator
  1. SELECT
  2. SUM(`auto`.`waarde`)
  3. FROM
  4. `garage`
  5. INNER JOIN
  6. `auto`
  7. ON
  8. `garage`.`auto_id` = `auto`.`id`
  9. WHERE
  10. `garage`.`lid_id` = 1;


Zo zou het moeten werken. Tenminste als je de waarde wilt weten van de auto's per garage per user.
Offline Thomas - 29/09/2006 16:23
Avatar van Thomas Moderator Er zijn meer auto's dan garages lijkt me, dus INNER JOIN zal niet het gewenste resultaat opleveren.

Waarom wil je uberhaupt de tabel Garage in je query betrekken? Deze heb je toch niet nodig.
Offline lasdesigner - 29/09/2006 16:34 (laatste wijziging 29/09/2006 16:35)
Avatar van lasdesigner PHP beginner Ehh, precies andersom, garage betekend het aantal autos dat in de garage staat. Auto zijn alleen de soorten.

@Wijnand,

Klopt niet, de schade moet er nog is vanaf!
Offline Thomas - 29/09/2006 16:39
Avatar van Thomas Moderator Euh...

De tabel Auto bevat auto-types, en de tabel garage bevat fysieke auto's van een bepaald type?

Lekkere naamgeving dan .

Maar wat wil je precies? De waarde (waarde minus schade) per auto-type?
Offline MechaVore - 29/09/2006 19:23
Avatar van MechaVore Gouden medaille

PHP gevorderde
  1. SELECT SUM(Auto.Waarde) FROM Garage INNER JOIN Auto ON(Garage.Auto_id = Auto.Id) WHERE Garage.Lid_id = 1
Offline lasdesigner - 30/09/2006 11:26
Avatar van lasdesigner PHP beginner
  1. SELECT (Auto.waarde / 100) * (100-Garage.schade) FROM Garage INNER JOIN Auto ON(Garage.Auto_id = Auto.Id) WHERE Garage.Lid_id = 1


-> Wat doe ik verkeerd? (Want de schade meot er nog is van afgetrokken zijn!)
Offline MechaVore - 30/09/2006 12:17 (laatste wijziging 30/09/2006 12:18)
Avatar van MechaVore Gouden medaille

PHP gevorderde
Je wilt dus: de waarde van alle auto's in iemand's zijn garage, min de schade van al zijn auto's ?

SELECT SUM( Auto.waarde ) - SUM( Garage.schade ) AS autos_waardes
FROM Garage
INNER JOIN Auto ON ( Garage.Auto_id = Auto.Id )
WHERE Garage.Lid_id =1
Offline lasdesigner - 30/09/2006 12:20 (laatste wijziging 30/09/2006 12:33)
Avatar van lasdesigner PHP beginner Klopt thx!
En hoe kan ik nu (met JOINS) de waarde van 1 auto (- de schade) berekenen?

Klopt niet trouwens! De schade is in procent!!
Offline MechaVore - 30/09/2006 13:24
Avatar van MechaVore Gouden medaille

PHP gevorderde
1:
SELECT ROUND(Auto.waarde/100 * (100 - Garage.schade)) AS autos_waardes
FROM Garage
INNER JOIN Auto ON ( Garage.Auto_id = Auto.Id )
WHERE Garage.Lid_id = 1 AND Garage.Id = 1


2:
SELECT ROUND(SUM(Auto.waarde/100 * (100 - Garage.schade))) AS autos_waardes
FROM Garage
INNER JOIN Auto ON ( Garage.Auto_id = Auto.Id )
WHERE Garage.Lid_id = 1
Offline lasdesigner - 30/09/2006 14:25 (laatste wijziging 30/09/2006 14:29)
Avatar van lasdesigner PHP beginner Hij doet het! Allebei!

Alleen, nu heb ik nog een vraagje wat ik geprobeerd heb (maar wat niet werkt). Nu wil ik dus een rij met alle auto's zowel met schade als met de waarde van de auto. Maar als ik dan de query gebruik voor 1 auto doet die het natuurlijk niet. Maar hoe kan ik het dan doen? Dat ik ook de rest van de gegevens eruit kan halen?
Offline MechaVore - 30/09/2006 14:45 (laatste wijziging 30/09/2006 14:58)
Avatar van MechaVore Gouden medaille

PHP gevorderde
Bedoel je dus eigenlijk: De garage van een speler?

  1. SELECT
  2. Auto.Naam,
  3. ROUND(Auto.Waarde/100 * (100 - Garage.Schade)) AS AutoWaarde,
  4. Auto.Waarde,
  5. Garage.Schade
  6. FROM Garage
  7. INNER JOIN Auto ON ( Garage.Auto_id = Auto.Id )
  8. WHERE Garage.Lid_id = 1
  9. ORDER BY Auto.Naam ASC
Offline lasdesigner - 30/09/2006 14:51
Avatar van lasdesigner PHP beginner Precies, en dan moet ik daar gewoon een for loop omheen zetten?
Offline MechaVore - 30/09/2006 14:59 (laatste wijziging 30/09/2006 15:00)
Avatar van MechaVore Gouden medaille

PHP gevorderde
For loop? Je wilt toch gewoon de garage van een speler bekijken? Je kan het gewoon in een while loop fetchen hoor .

  1. <?
  2. $rSql = mysql_query("SELECT
  3. Auto.Naam,
  4. ROUND(Auto.Waarde/100 * (100 - Garage.Schade)) AS AutoWaarde,
  5. Auto.Waarde,
  6. Garage.Schade
  7. FROM Garage
  8. INNER JOIN Auto ON ( Garage.Auto_id = Auto.Id )
  9. WHERE Garage.Lid_id = 1
  10. ORDER BY Auto.Naam ASC")or die(mysql_error());
  11. while($aAssoc = mysql_fetch_assoc($rSql)){
  12. echo "Auto: " .$aAssoc["Naam"] ."<br />";
  13. echo "Waarde (Nieuw): " .$aAssoc["Waarde"] ."<br />";
  14. echo "Waarde: " .$aAssoc["AutoWaarde"] ."<br />";
  15. echo "Schade: " .$aAssoc["Schade"] ."<br /><br />";
  16. }
  17. ?>
Offline lasdesigner - 30/09/2006 15:02
Avatar van lasdesigner PHP beginner Nee, want bji mij komen de gegevens in een array. Ik gebruik namelijk een database class.
Offline MechaVore - 30/09/2006 15:04
Avatar van MechaVore Gouden medaille

PHP gevorderde
Dan kan je ook wel met een foreach de array uitlopen, maar met een for zal het natuurlijk ook gaan, tenzij het geen geindexeerde arrays zijn.
Offline lasdesigner - 30/09/2006 15:10
Avatar van lasdesigner PHP beginner $db = $garage->AlleAutos($_SESSION['id']);
for($i = 0; $i<count($db); $i++) {
echo "Auto: ".$db[$i]['Naam']."<BR />";
echo "Waarde (nieuw): ".$db[$i]['Waarde']."<BR />";
echo "Waarde: ".$db[$i]['AutoWaarde']."<BR />";
echo "Schade: ".$db[$i]['Schade']."<BR />";
echo "<hr />";
}

Zo is die gelukt 

Harstikke bedankt! Ik ga er nu een verkoop (/carwash) systeem aan bouwen! 
Offline MechaVore - 30/09/2006 15:12
Avatar van MechaVore Gouden medaille

PHP gevorderde
Tip:
Haal die count uit je conditie van je for loop, omdat die nu elke keer weer uitgevoerd wordt.
  1. <?
  2. $db = $garage->AlleAutos($_SESSION['id']);
  3. $iCount = count($db);
  4. for($i = 0; $i<$iCount; $i++) {
  5. echo "Auto: ".$db[$i]['Naam']."<BR />";
  6. echo "Waarde (nieuw): ".$db[$i]['Waarde']."<BR />";
  7. echo "Waarde: ".$db[$i]['AutoWaarde']."<BR />";
  8. echo "Schade: ".$db[$i]['Schade']."<BR />";
  9. echo "<hr />";
  10. }
  11. ?>
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.26s