0%

Stel precieze vragen · oefening

Zet passende voorwerpen in aflopende volgorde

De zoekopdracht vindt nu drie geschikte voorwerpen, maar de langste toegestane uitleentermijn staat niet gegarandeerd bovenaan. Als Riley de meest flexibele optie bovenaan wil, wordt de rijvolgorde onderdeel van de vraag in plaats van iets dat je aan het toeval overlaat.

Verwijder de puntkomma na de WHERE-voorwaarde in search.sql en voeg deze regel toe:

ORDER BY loan_days DESC;

Het volledige einde hoort er zo uit te zien:

WHERE (category = 'tools' OR category = 'events')
  AND loan_days <= 7
ORDER BY loan_days DESC;

Druk op Run. De rijen met zeven dagen horen vóór de trapladder met drie dagen te verschijnen:

TL-100 | Cordless drill | tools | 7
EV-101 | Folding table | events | 7
TL-220 | Step ladder | tools | 3

ORDER BY vraagt SQLite om het volledige resultaat op een waarde te ordenen. DESC betekent aflopend, dus grotere waarden van loan_days komen vóór kleinere. Met ASC, of zonder een richting op te geven, zou de kortste termijn eerst komen, omdat oplopend de standaardrichting is.

Je kunt de zichtbare termijnen van boven naar beneden lezen om de richting te controleren: 7, 7, 3. Elke volgende waarde is gelijk aan of kleiner dan de waarde erboven. Dat is het bewijs waar je na Run naar zoekt.

De accuboormachine en klaptafel hebben allebei een termijn van zeven dagen. Elk van beide mag hier als eerste verschijnen. Sorteren op één waarde kan niet kiezen tussen rijen waarin die waarde gelijk is, en SQLite heeft niet beloofd de volgorde te behouden die je eerder toevallig zag.

Die gelijke stand geeft nuttige informatie. Je query heeft precies gedaan wat je vroeg, maar je vraag is nog niet gedetailleerd genoeg om voor elke rij één vaste volgorde te kiezen. In de volgende oefening beslissen we bij gelijke waarden. Hier zijn maar twee dingen vereist: de passende rijen blijven hetzelfde en hun uitleentermijnen nemen nooit toe als je naar beneden leest.

Submit gebruikt een andere catalogus die in een andere volgorde is ingevoegd. Zet DESC direct na loan_days, zodat je SQL de richting vastlegt in plaats van af te gaan op ID’s, invoegvolgorde of een berekening die toevallig een bepaalde verzameling getallen omkeert.

Je hebt de rijvolgorde een expliciet onderdeel van het antwoord gemaakt. De langste passende termijn komt nu bovenaan omdat de query dat voorschrijft.

Opdracht

Orden de passende rijen in search.sql op loan_days DESC. Laat de bestaande kolommen en het filter ongewijzigd.

Voer de query uit, controleer of langere termijnen vooraan staan en stuur hem in.