login  Naam:   Wachtwoord: 
Registreer je!
 Forum

1 query in 2 delen

Offline Voldemort - 20/05/2006 20:07
Avatar van VoldemortPHP ver gevorderde Ik heb deze querie:

  1. $query2 = "SELECT `catid`, `naam`, `beschr`, `niv`, `aangem`
  2. FROM `lessen_cat`
  3. WHERE `jaar`<='".$jaars."'";
  4. $result2 = $db->query($query2);


Ik wil nu dat je zoiets krijgt:

Aangemeld:
- Vak 1
- Vak 2

Niet aangemeld:
- Vak 3
- Vak 4

Ik weet dat ik het met 2 queries kan doen (bij WHERE zetten: && `aangem`='1' (wel aangemeld en 0 voor niet aangemeld)). Hoe kan ik dit toch op 1 query houden?

6 antwoorden

Gesponsorde links
Offline Thomas - 24/05/2006 15:49
Avatar van Thomas Moderator Het idee van A LEFT JOIN B is dat je items uit A koppelt aan items uit B. Hierbij krijg je alle items uit A (lessen_cat), zonder dat er per sé een "tegenhanger" in B (lessen_aangem) hoeft te zijn.

Als je gegevens uit B probeert op te vragen die er niet zijn op grond van de JOIN, worden deze gegevens (kolommen in B) voorgesteld door NULL.

Als jij een query uitvoert van de vorm:
  1. SELECT v.*, l.lidid AS test
  2. FROM `lessen_cat` v
  3. LEFT JOIN `lessen_aangem` l ON(v.`catid` = l.`vakid`)
  4. WHERE v.lidid = ...


Dan zal de kolom "test" de waarde NULL bevatten bij de vakken waarvoor een lid niet is ingeschreven.

Op grond daarvan zou je kunnen bepalen waarvoor iemand wel / niet is ingeschreven.

Mocht je dit niet aan de praat krijgen, is het niet dodelijk om hier gewoon 2 queries voor te gebruiken.

Ik hoop dat je in de tussentijd ook zelf het e.e.a. hebt geprobeerd?
Offline Voldemort - 24/05/2006 15:57 (laatste wijziging 24/05/2006 15:57)
Avatar van Voldemort PHP ver gevorderde Maar in plaats van die NULL waarde te bekomen heb ik COUNT gedaan om zo te weten te komen of er wel een waarde is, dus je reactie klopt niet helemaal.

En ja ik heb dingen geprobeert:

&& vervangen door AND
` weghalen
Bij GROUP BY die v.`naam` in l.`catid` veranderen

Maar die werkten niet.
Offline Thomas - 24/05/2006 16:17
Avatar van Thomas Moderator "dus je reactie klopt niet helemaal"

huh?
false => true?

Wat geeft die COUNT dan terug?
Kunnen mensen ook meerdere keren vakken volgen, ik snap nl. niet helemaal waarom je een COUNT gebruikt...

Gebruik phpMyAdmin om queries aan de praat te krijgen / te controleren, meestal heb je dan fouten zo verwijderd.
Offline Voldemort - 24/05/2006 16:26
Avatar van Voldemort PHP ver gevorderde phpmyadmin geeft:

Citaat:
MySQL gaf een lege resultaat set terug (0 rijen). (Query duurde 0.0672 sec)



Bedoeling: Leden kunnen zich aanmelden voor verschillende vakken. Als je bent aangemeld kom je voor in de tabel lessen_aangem. Anders kom je er niet in voor. Dus als de COUNT 0 is, ben je nog niet aangemeld, als de count groter is dan 0, ben je wel aangemeld. Op basis van die gegevens wil ik alles ordenen. De tabel lessen_cat, daaruit moet alles gesorteerd worden op aangemeld of niet aangemeld. Die COUNT is dus om te tellen hoeveel keer je voorkomt en zo uit te maken of je bent aangemeld.

Snap je het?
Offline Thomas - 24/05/2006 16:57 (laatste wijziging 24/05/2006 17:01)
Avatar van Thomas Moderator Ik snap het wel, alleen begrijp ik je aanpak niet. Heb je al geprobeerd iets te doen met NULL, in plaats van COUNT? Dit werkt blijkbaar niet.

EDIT: Doe het anders in 2 queries:

1. Maak een lijst van vak-id's en namen
2. Maak een lijkst van vak-id's waarvoor iemand zich ingeschreven heeft.

Vergelijk deze met elkaar?
Offline Voldemort - 24/05/2006 18:06
Avatar van Voldemort PHP ver gevorderde Ik heb 2 aparte queries gedaan, alleen liep die hele code dan in de war. Dus heb ik in de while een COUNT gedaan en per resultaat in de juiste array gestoken. Zo heb ik 2 arrays, 1 met ID's van aangemelde lessen en 1 met ID's van niet aangemelde lessen. Buiten de while lees ik deze 2 arrays dan uit met foreach en ga ik per keer de juiste info ophalen.

Nu werkt alles prima, alleen zijn er nu jammer genoeg veel meer queries (stuk of 15 omdat ie per vak een query moet uitvoeren).
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2025 Sitemasters.be - Regels - Laadtijd: 0.228s