Permalänk
Medlem

[SQL] Parse error

IF(jf.value IS NOT NULL, SELECT jf.value FROM jos_jf_content AS jf WHERE jf.reference_id=22 AND jf.language_id=2 AND jf.reference_field='introtext' AND jf.published=1, SELECT a.introtext FROM jos_content AS a WHERE id=22)

Det jag vill åstadkomma är att "Om jf.value inte är tomt, SELECT jf.value etc etc. Annars så SELECT a.introtext". Men det jag får till svar är parse error :/
Kan någon vänlig själ bättra på min knaggliga SQL?

Edit:

IF jf.value IS NOT NULL THEN SELECT jf.value FROM jos_jf_content AS jf WHERE jf.reference_id=22 AND jf.language_id=2 AND jf.reference_field='introtext' AND jf.published=1 ELSE SELECT a.introtext FROM jos_content AS a WHERE id=22

Kom inte längre

Visa signatur

Swec @ 2001 / Chalmerist - Javisst!
'Den som har flest prylar när han dör vinner!'

Permalänk
Medlem

Är det MySQL?
Måste du inte avsluta med END IF; ?

Permalänk
Medlem

Re: [SQL] Parse error

Kika lite här:
http://dev.mysql.com/doc/refman/4.1/en/control-flow-functions...

Jag fick det till (otestat):

SELECT IF( jf.value IS NOT NULL, jf.value FROM jos_jf_content AS jf WHERE jf.reference_id=22 AND jf.language_id=2 AND jf.reference_field='introtext' AND jf.published=1, SELECT a.introtext FROM jos_content AS a WHERE id=22);

Alltså
SELECT IF(fråga, sant, falskt);

/Niclas

Visa signatur

Har bytt namn från: nulleman ~ Blogg: http://skorpion.se
MacBook Pro: 15.4' ~ 1.83GHz ~ 1512MB RAM ~ 80GB HDD
Medlem i signaturen blodtörstiga Appleanvändare

Permalänk
Medlem

gagg: Ja, det är MySQL. Och jo, man måste avsluta med det. Men jag har testat :/

skorpion: Mm, du gjorde en liten omstrukturering från min första query. Tyvärr fungerade inte din heller :/

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM jos_jf_content AS jf WHERE jf.reference_id=22 AND jf.language_id=2 AND jf.r' at line 3

Edit:
Testade även nu

CASE WHEN jf.value IS NOT NULL THEN (SELECT jf.value FROM jos_jf_content AS jf WHERE jf.reference_id=22 AND jf.language_id=2 AND jf.reference_field='introtext' AND jf.published=1) ELSE (SELECT a.introtext FROM jos_content AS a WHERE id=22);

Visa signatur

Swec @ 2001 / Chalmerist - Javisst!
'Den som har flest prylar när han dör vinner!'

Permalänk
Medlem

vad dum jag är, testa detta istället

SELECT IF( jf.value IS NOT NULL, jf.value FROM jos_jf_content AS jf WHERE jf.reference_id=22 AND jf.language_id=2 AND jf.reference_field='introtext' AND jf.published=1, a.introtext FROM jos_content AS a WHERE id=22);

Vad händer?

Visa signatur

Har bytt namn från: nulleman ~ Blogg: http://skorpion.se
MacBook Pro: 15.4' ~ 1.83GHz ~ 1512MB RAM ~ 80GB HDD
Medlem i signaturen blodtörstiga Appleanvändare

Permalänk
Medlem

Parse error
Det verkar som den klagar på början hela tiden.

Visa signatur

Swec @ 2001 / Chalmerist - Javisst!
'Den som har flest prylar när han dör vinner!'

Permalänk
Medlem

Sorry, men jag ger upp, det är för krångligt för mig

men du kanske ska kika lite på case?

Visa signatur

Har bytt namn från: nulleman ~ Blogg: http://skorpion.se
MacBook Pro: 15.4' ~ 1.83GHz ~ 1512MB RAM ~ 80GB HDD
Medlem i signaturen blodtörstiga Appleanvändare

Permalänk
Medlem

Det har jag gjort. Funkade inte heller :'(
Urk vad jobbigt det ska vara då !

Visa signatur

Swec @ 2001 / Chalmerist - Javisst!
'Den som har flest prylar när han dör vinner!'

Permalänk

SELECT IF( jf.value IS NOT NULL, jf.value FROM jos_jf_content AS jf WHERE jf.reference_id=22 AND jf.language_id=2 AND jf.reference_field='introtext' AND jf.published=1, a.introtext FROM jos_content AS a WHERE id=22);

I den koden (samma som skorpion postade senast) kommer ju jf inte deklareras ifall frågan retunerar falskt (false), kanske det som spökar?

Detta kanske funkar bättre (helt otestat):

SELECT IF( jf.value IS NOT NULL, jf.value FROM jos_jf_content AS jf WHERE jf.reference_id=22 AND jf.language_id=2 AND jf.reference_field='introtext' AND jf.published=1, a.introtext FROM jos_content AS a, jos_jf_content AS jf WHERE id=22);

Vilken id då det blir false ska vara 22, a.id eller jf.id?

Visa signatur

Permalänk
Medlem

Bra idé, men följande kod funkade inte heller.

SELECT IF( jos_jf_content.value IS NOT NULL, jf.value FROM jos_jf_content AS jf WHERE jf.reference_id=22 AND jf.language_id=2 AND jf.reference_field='introtext' AND jf.published=1, a.introtext FROM jos_content AS a, jos_jf_content AS jf WHERE a.id=22);

Visa signatur

Swec @ 2001 / Chalmerist - Javisst!
'Den som har flest prylar när han dör vinner!'

Permalänk

Samma fel med min kod också? Körde koden i en SQL-validator (http://developer.mimer.com/validator/parser200x/index.tml#par...) och fick lite parse error. Fast de felen verkade mest vara på grund av att du använder ett reserverat ord som ett fält.

Testa detta istället

SELECT IF( `jf.value` IS NOT NULL, `jf.value` FROM jos_jf_content AS jf WHERE jf.reference_id=22 AND jf.language_id=2 AND jf.reference_field='introtext' AND jf.published=1, a.introtext FROM jos_content AS a, jos_jf_content AS jf WHERE a.id=22);

Visa signatur

Permalänk
Medlem

Gick inte heller
Tittar jag på det här alldeles fel? Det borde väl gå?

Visa signatur

Swec @ 2001 / Chalmerist - Javisst!
'Den som har flest prylar när han dör vinner!'