Jag är inte så skolad i (my)SQL och ber därför om hjälp med följande: Jag undrar om det går att köra följande pseudo kod som en sqlfråga, och hur skulle det isåfall se ut?
SELECT kolumn FROM tabell WHERE a = 1
IF inga svar
SELECT kolumn FROM tabell WHERE a = 2
IF fortfarande inga svar
SELECT kolumn FROM tabell WHERE a = 3
Om första frågan inte genererar några svar så skall nästa körsas etc. Tack för eventull hjälp!
Enklast (eller i alla fall en lösning) är att köra det som
3 separate queries från det språk/miljö där deet anropas från.
Om MySQL stöder "compund statements" så bör IF eller CASE
fungera. Det är dock lite oklart om MySQL stöder annat
än "singleton selects" (d.v.s ett statement som ger fler än
1 row) i sina THEN delar. Online dokumenationen är lite
oklar där...
div databaser har div scriptspråk eller vad du väljer att kalla dem, tex plsql i oracle, dock bör man hålla sig ifrån sådant för att bibehålla portabilitet. Gör man så och håller sig till "ren" sql så finns ej tex IF
helt hypotetiskt är det inte, det är väl en kombination av att evetuellt snappa upp lite nytt och ett performance test på ett nuvarande projekt. Jag märker allt oftare hur jag gör omständiga saker i kod som jag redan kan ha gjort på mysqlsidan (såsom IFNULL() och konkatenering), inte för att detta var värst omständigt som "vanlig" kod dock. Lösningen idag, precis som sodjan föreslår, är att göra det som 3 x ca 2000 queries, men jag var lite nyfiken på om det gick snabbare med 1 x 2000 långa dito. Och frågarna är lite krångligare än a = 1. det var mest konceptet jag sökte.
Jag brukar också försöka avlasta PHP genom att stoppa in grovgörat i MySQL. Speciellt när det gäller tid- och datumberäkningar tycker jag MySQL är till god hjälp.
> Gör man så och håller sig till "ren" sql så finns ej tex IF
Vad menar du med "ren" SQL ? Vilken standard ?
ANSI/ISO 1989 SQL fanns redan sådant som t.ex BEGIN/END för compund statements.
ANSI/ISO 1992 SQL tillförde t.ex sådant som CASE/WHEN/THEN/ELSE/END-CASE (dock inget IF än).
I ANSI/ISO 1999 SQL kom IF/ELSEIF/END-IF och DO/WHILE/LEAVE/END-DO.
"SQL:1999 Core" är vad de flesta produkter i dag säger sig stödja,
men små, ofta plattformsspecifika, variationer.
Sen är det en annan sak att vissa produkter som t.ex Sybase med T-SQL
(och därmed även MS SQL Server efter som i princip är samma sak)
och Oracle (med PL/SQL) har byggt sina egna lösningar som inte riktigt
följer dessa ANSI/ISO SQL standard.
Senare SQL standards (SQL:2003 och SQL:2006) handlar med om t.ex
XML integration o.s.v och är inte lika intressanta ur en ren
rellationsdatabassynvinkel.