Ik vroeg me af hoe jullie je SQL-query's inspringen, ikzelf weet namelijk niet zeker welke manier ik wil gaan gebruiken, mogelijk brengen jullie mij op een idee.

Dus: Hoe zouden jullie deze query inspringen:

SELECT a.*, DATE(a.datum) AS datum, p.naam, p.prijs FROM aanvragen AS a, producten AS p WHERE a.klantid = ".$iKlantId." AND p.id = a.productid ORDER BY id DESC

En deze query:

INSERT INTO aanvragen (klantid, productid, datum) VALUES ('".$iKlantId."', '".$iProductId."', NOW())

En deze query:

UPDATE aanvragen SET productid = '".$iProductId."', datum = NOW() WHERE id = ".$iAanvraagId." LIMIT 1

En deze query:

DELETE FROM aanvragen WHERE id = ".$iAanvraagId." LIMIT 1


Graag responses!

Ook als je dezelfde 'syntax' gebruikt als een voorgaande poster, graag reageren, dan weet ik welke het meest / vaak gebruikt wordt ;)

PS. Liever geen responses over SQL Injection en slimmere manieren om data op te halen, deze queries gebruik ik niet echt, ze zijn alleen voor jullie om in te springen ;)

SELECT 
  a.*, 
  DATE(a.datum) AS datum, 
  p.naam, 
  p.prijs 
FROM 
  aanvragen AS a, 
  producten AS p 
WHERE 
  a.klantid = ".$aKlant['id']." 
AND 
  p.id = a.productid 
ORDER BY 
  id DESC

== 

INSERT INTO aanvragen 
(
  klantid, 
  productid, 
  datum
) 
VALUES 
(
  '".$iKlantId."', 
  '".$iProductId."', 
  NOW()
)

==

UPDATE 
  aanvragen 
SET 
  productid = '".$iProductId."', 
  datum = NOW() 
WHERE 
  id = ".$iAanvraagId." 
LIMIT 1

== 

DELETE FROM 
  aanvragen 
WHERE 
  id = ".$iAanvraagId." 
LIMIT 1

Zo, is wel duidelijk denk ik...
Dankje Joren:) Ik had nog twee vraagjes:

Je doet overal eerst de 'opdracht' ('ORDER BY' bijvoorbeeld) dan een enter en een tab, en dan de 'waarde' ('id DESC' bijvoorbeeld), behalve bij LIMIT, heeft dit nog een reden, buiten het feit dat de 'waarde' van LIMIT bijna altijd heel klein is?

En je doet SELECT [enter, tab] wat-te-selecteren en ook zo bij UPDATE en DELETE, maar niet bij INSERT, why?
het ASC of DESC sortegen zet je ook altijd direct achter de kolom waarop je wil sorteren.

Bij LIMIT is het overzichtelijker om dit ook op 1 regel te gebruiken, ook vanwege de lengte indd.
ASC en DESC zijn imo meer 'toevoegingen' aan de waarde, net als het AS-gedeelte bij
aanvragen AS a

LIMIT is imo een echte 'opdracht', met een waarde die niet eens altijd zo kort is, je kunt natuurlijk 'LIMIT 10' doen, maar ook 'LIMIT 10, 20'


Ik vind Blanches 'syntax' overigens zeer overzichtelijk/handig/whatever, dus ik denk dat ik die ook ga gebruiken, met de uitzondering dat ik wel een entertje bij LIMIT ga neerzetten. En ik weet ook nog niet wat ik ga doen aangaande mijn tweede vraagje aan Joren.
Welke opbouw je het fijnste vindt is natuurlijk puur je eigen smaak, dit is dus eigenlijk puur zo gegroeid.

Voor die INSERT query zou je bijvoorbeeld ook zoiets kunnen verzinnen:

INSERT INTO
  aanvragen (
    kolom1,
    kolom2,
    kolom3
) VALUES (
    waarde1,
    waarde2,
    waarde3
)

Maar persoonlijk vind ik het overzichtelijker als de bij elkaar horende haakjes ook onder elkaar staan...

Bij de LIMIT zet ik de waarde er wel direct achter, puur en alleen om de lengte van die waarde, die altijd kort is. Verder gebruik ik nooit de syntax '10, 20' maar geef ik altijd netjes een offset aan. Vergelijk:

LIMIT 20
OFFSET 10

En:

LIMIT
  20
OFFSET
  10

Dan vind ik de eerste opbouw duidelijker, vooral als je dit in een lange query opneemt. Een nieuwe regel voor 10 en 20 is dan een beetje teveel van het goede.

ps. Het komt er dus uiteindelijk op neer dat je een syntax kiest die jezelf pretting vindt werken en dat je je vervolgens consequent aan die syntax houdt. Uiteraard kies je wel een syntax die ook redelijk leesbaar is voor andere programmeurs ;-)
Ja dat is waar, maar zoals je op het einde zegt gaat het me niet alleen om wat ik zelf fijn vind, maar ook om wat fijn is voor anderen. :)

De INSERT zoals jij hem gebruikt ga ik denk ik ook doen.
En LIMIT heb je ook gelijk in, ik kende OFFSET niet eens, dus die ga ik los van LIMIT gebruiken, en niet samen achter LIMIT.

Nou dankjewel allemaal, Joren dus, en eigenlijk mag hier een lockje op, ik weet genoeg ;)
ik kende OFFSET niet eens
OFFSET is standaard SQL, de schrijfwijze die jij gebruikte zal alleen binnen MySQL werken...

ps. Slotjes doen we niet aan, wellicht dat iemand anders nog een vraag wil stellen of een opmerking wil plaatsen in dit topic ;-)
Okay, ik heb de LIMIT x, y -syntax volgens mij een keer opgepikt in een script van een ander, dus niet eens gekeken of er zoiets als OFFSET bestond ;)

PS. Okay :)

Reageren