login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Items zonder children selecteren

Offline Frisbee - 30/08/2006 10:35
Avatar van FrisbeeHTML beginner Ik heb een tabel waarbij elk record een id en een parent_id heeft. Nu wil ik alleen de records selecteren die geen children hebben (dus geen records waarbij het parent_id het id van dat record is). Dat krijg ik alleen niet voor elkaar.

Iemand een tip?

14 antwoorden

Gesponsorde links
Offline Clemens32 - 30/08/2006 10:38
Avatar van Clemens32 PHP interesse Kan je een stukje code (gepost in www.plaatscode.be) plaatsen?
Haal je de records uit de dbase, hoe worden de vars genoemd?
Ik ben zelf een beginner, maar wil wel proberen te helpen.
Offline jensen - 30/08/2006 10:39
Avatar van jensen Nieuw lid
  1. ...WHERE `id` = `parent_id`...
:?:
Offline Frisbee - 30/08/2006 10:47
Avatar van Frisbee HTML beginner m'n database zit zo in elkaar:

id | parent_id | name
1 | 0 | test 1
2 | 0 | test 2
3 | 1 | test 3
4 | 1 | test 4
5 | 4 | test 5
6 | 2 | test 6
7 | 5 | test 7

Sommige items hebben dus subitems (children) en sommige niet. Nu wil ik alle items selecteren die geen children hebben. Het liefst (als dat mogelijk is) in één query. Alleen heb ik echt geen idee hoe die query er uit moet komen te zien.
Offline marten - 30/08/2006 10:49 (laatste wijziging 30/08/2006 10:50)
Avatar van marten Beheerder Hoe koppel je de children aan de ouders?
Via de databaste neem ik aan? Dan mag het toch geen probleem zijn om alle ouders te zoeken die geen kinderen hebben?

Dus alle kinderen zonder ouders hebben parent_id 0 ?

Dan kan het gewoon zo

SELECT * FROM tabelnaam WHERE parent_id = 0
Offline Frisbee - 30/08/2006 10:53
Avatar van Frisbee HTML beginner Maar dan heb je dus de items zonder parents. Ik wil juist de items zonder children.
Offline CDNC - 30/08/2006 10:55 (laatste wijziging 30/08/2006 11:01)
Avatar van CDNC PHP ver gevorderde
  1. <?
  2. $items = array();
  3.  
  4. $psqlq = mysql_query("SELECT * FROM `parents`");
  5. while($psqlf = mysql_fectch_assoc($sqlq))
  6. {
  7.  
  8. $isqlq = mysql_query("SELECT COUNT(id) FROM `items` WHERE parent_id = ". $psqlf ['id']);
  9. $isqlr = mysql_result($isqlq, 0);
  10. if($isqlr == 0)
  11. {
  12. $items[] = $psqlf['naam'];
  13. }
  14. }
  15.  
  16. /*
  17.  * de array items bevat nu (normaal) alle parents zonden children
  18.  * de manier is een beetje onslachtig, er zullen zeker
  19.  * betere manieren bestaan, maar die ken ik niet.
  20.  */
  21. ?>
Offline Frisbee - 30/08/2006 11:02
Avatar van Frisbee HTML beginner Hier heb ik wat aan 

Hoopte dat het in één query zou kunnen maar verlopig kan ik hier in ieder geval mee verder. Bedankt!

Weet iemand misschien of het mogelijk is om het in één query te zetten?
Offline Abbas - 30/08/2006 13:10 (laatste wijziging 30/08/2006 13:11)
Avatar van Abbas Gouden medaille

Crew .NET
CDNC er zit een foutje in je query:
deze moet zijn:

  1. <?kleur
  2. $psqlq = mysql_query("SELECT * FROM `parents`");
  3. while($psqlf = mysql_fectch_assoc($psqlq))


je vergat een 'p' na ... fetch_assoc($psqlq))
;-)
Offline Simon - 30/08/2006 13:45
Avatar van Simon PHP expert en het is trouwens _fetch_ en niet _fectch_
Offline Thomas - 30/08/2006 13:50
Avatar van Thomas Moderator Eigenlijk ben je dus op zoek naar alle id's, die niet in de parent_id kolom voorkomen.

Zoals met veel vraagstukken is het makkelijker om dit sorteerprobleem te verplaatsen naar PHP.

Je hebt voldoende aan één query die de id's en parent-id's opvraagt.
Daarna bouw je twee arrays - een waarin alle id's voorkomen, en een waarin de verschillende parent-id's voorkomen.
Vervolgens pak je het verschil van deze twee arrays m.b.v. array_diff en je bent klaar.
Offline CDNC - 30/08/2006 14:03 (laatste wijziging 30/08/2006 14:03)
Avatar van CDNC PHP ver gevorderde
Citaat:
en het is trouwens _fetch_ en niet _fectch_

idd


Citaat:
CDNC er zit een foutje in je query:
deze moet zijn:
[..code..]

ook waar, komt omdat ik eerst de query $sqlq had geneomt maar toen ik eraan dacht dat ik er 2 nodig hou hebben had ik bij de query zelf die p (van parent) bij gezet en i (van item) bij de rest
Offline Abbas - 30/08/2006 14:04
Avatar van Abbas Gouden medaille

Crew .NET
@Simon
you're right , didn't see that one 
Offline ikkedikke - 30/08/2006 15:15
Avatar van ikkedikke PHP expert SELECT *
FROM `wedstrijden` AS `tabel1`
WHERE (
SELECT COUNT( 1 )
FROM `hallen`
WHERE `tabel1`.`id` = `hallen`.`plaats`
) =0

Op deze manier zou het ook voor jouw query moeten lukken.
Offline Thomas - 30/08/2006 16:45
Avatar van Thomas Moderator Toch alleen als MySQL nieuw genoeg is en subqueries ondersteunt, maar je hoeft echt niet zo moeilijk te doen - zie mijn vorige reactie en leer er wat van...
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.23s