Toon posts:

[PHP-mySQL probleem]

Pagina: 1
Acties:
  • 29 views sinds 30-01-2008

Verwijderd

Topicstarter
Ik wil squads opvragen met de daaronder behorende personen.
Maar op een 1 of andere manier krijg meerdere malen results van $row1 terwijl ik maar 1 record hoor terug te krijgen.

Ik krijg dus 4x dezelfde name terug bij de ***

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
while($row = mysql_fetch_array($result))
  {
  echo $row['sqdName'];
  echo "<br>";
    $query = "SELECT * FROM person p, squad s WHERE p.sqdId = '".$row['sqdId']."'" ;
    $result1 = mysql_query($query);


*** while($row1 = mysql_fetch_array($result1))     *** 
    {
      echo $row1['name'];
      echo "<br>";
    }
  }



Bij de *** fetcht hij 4x hetzelfde record
Hij voert deze loop 4x uit terwijl dat maar 1x zou moeten. ( er zitten 4 records in tbl squad en 1 in person, ik krijg dus 4x dezelfde person terug)

Ik heb de queries in mysql geprobeerd en daarbij gebeurt er precies wat ik wil.


Iemand idee hoe ik zulke loops hoor te nesten?

  • HyperioN
  • Registratie: April 2003
  • Laatst online: 21:06
Echo eventjes iets in de $result-loop en de $result1-loop, dan weet je in ieder geval welke loop te vaak loopt.

  • Gonadan
  • Registratie: Februari 2004
  • Nu online

Gonadan

Admin Beeld & Geluid, Harde Waren
Je doet een Join, dan combineert hij de tabellen.
Je moet nog iets doen als s.sqdId=p.sqdId in je WHERE clausule. :)

Dan krijg je namelijk alleen de goede combinatie terug van de persoon. :)

[ Voor 25% gewijzigd door Gonadan op 12-06-2006 16:02 ]

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


  • André
  • Registratie: Maart 2002
  • Laatst online: 09:23

André

Analytics dude

Move naar Programming

Verwijderd

Topicstarter
Ik ben erachter dat de 2e while hetzelfde aantal records teruggeeft als de eerste while.
In output dus .
Chopper Division
BF2Enforcer
BF2Enforcer
BF2Enforcer
BF2Enforcer
BF2Enforcer
Capture squad 1
Capture squad 2
Aviator division
Commander

Hoe nest men normaliter een while in een while?
Ik heb even goed gekeken maar wat zou ik dan aan de where clausule moeten toevoegen volgens mij is het duidelijk: iedereen van squad 1 opvragen als $row wordt gequeried.iedereen van squad 2 opvragen als de volgende $row wordt gequeried.


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
$result = mysql_query("SELECT * FROM squad");
while($row = mysql_fetch_array($result))
  {
  echo $row['sqdName'];
  echo "<br>";
    $query = "SELECT p.name FROM person p, squad s WHERE p.sqdId = '".$row['sqdId']."'" ;
    $result1 = mysql_query($query);
    while($row1 = mysql_fetch_array($result1))
    {
      echo $row1['name'];
      echo "<br>";
    }
  }

[ Voor 13% gewijzigd door Verwijderd op 12-06-2006 16:16 ]


  • killercow
  • Registratie: Maart 2000
  • Laatst online: 08:34

killercow

eth0

Je sql klopt niet,

Je doet nu een full table join,

voor elk record in "person" haal je elk record in squad op. 4x1 =4. als je 2 rijtjes in die andere table zou hebben kreeg je 4x2 rows.

Je moet je join afmaken, en er een join conditie in stoppen, "person.squad_id=squad.id" oid

openkat.nl al gezien?


  • Rigi
  • Registratie: September 2001
  • Laatst online: 30-11-2018
Gonadan schreef op maandag 12 juni 2006 @ 16:01:
Je doet een Join, dan combineert hij de tabellen.
Je moet nog iets doen als s.sqdId=p.sqdId in je WHERE clausule. :)

Dan krijg je namelijk alleen de goede combinatie terug van de persoon. :)
Had je dit al geprobeerd?

Verwijderd

Topicstarter
Aah bedankt ik heb distinct toegevoegd en nu werkt het goed

$query = "SELECT DISTINCT(p.name) FROM person p, squad s WHERE p.sqdId = '".$row['sqdId']."'" ;

Dank u wel.

  • killercow
  • Registratie: Maart 2000
  • Laatst online: 08:34

killercow

eth0

Dude, distinct is not the way to go.

Met distinct kun je nu alsnog nog maar een veld ophalen. Dat is in dit geval geen probleem, Maar is wel onnodig zwaar, en je leert er geen kloot van om het in de toekomst beter te doen.

Er staat een prachtig hoofdstuk over joins in de FAQ van dit forum. lees het en probeer in ieder geval enkele van de voorbeeldjes.

openkat.nl al gezien?


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Tsja, als je niet wìl luisteren moet je geen topic openen he? ;) Er is nou al twee keer geroepen dat je een cartesisch product maakt in plaats van de inner join die je bedoelt. Dan kun je de resultset achteraf met DISTINCT wel gaan verkleinen, maar dan is het leed van het ophalen uit je database al geschied.

Volg het advies van killercow asjeblieft wel op en lees de SQL-FAQ van dit subforum even door. Dit topic gaat in elk geval op slot, omdat het dus letterlijk in die FAQ beantwoord staat.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.

Pagina: 1

Dit topic is gesloten.