IF-trapje met 7 levels ?

Status
Niet open voor verdere reacties.

pewie37

Gebruiker
Lid geworden
2 sep 2007
Berichten
506
Hallo :D,

Allereerst, ik ben een absolute newbe v.w.b. sql.

Uitleg:
Ik heb binnen een programma (dat ik heb voor het bijhouden van een prestashop-webwinkel) de mogelijkheid om bepaalde velden binnen een feed van de leverancier die niet volledig voldoen aan de prestashop-standaard om te programmeren. Zo is er een veld waarin je (komma-gescheiden) de paden/bestandsnamen van de te downloaden afbeeldingen dient aan te geven.

Probleem:
Alleen heb ik dat niet. Ik heb 1 veld genaamd [npictures] waarin een getal staat dat het aantal afbeeldingen vertegenwoordigd dat bij dit product hoort. Tevens is er een veld met slechts 1 bestandsnaam: "artikelnummer.jpg". Je voelt 'm al aankomen bij 3 afbeeldingen is de bestandsnaam van afbeelding 2: "artikelnummer_2.jpg" en 3: "artikelnummer_3.jpg".

Reeds gedaan:
Op dit moment heb ik al een stukje code die kan kijken naar het aantal afbeeldingen en daar binnen een IF-statement een string van maakt met de komma-gescheiden bestandsnamen (zie ook afbeelding)
if ([CSV_COL(39)]=1,CONCAT("http://graphics.edc-internet.nl/500/" , [CSV_COL(35)]),"")

Vragen:
1. Aangezien het aantal afbeelding maximaal 7 kan zijn en dat in 1 enkele regel rommelig en onoverzichtelijk is . . .
Hoe programmeer ik dit netjes en overzichtelijk in een mooi ingesprongen "trappetje" ?
2. Het probleem zit 'm tevens in de "_x" die tussen de bestandnaam in moet ("bestandsnaam_3.jpg")
Hoe krijg ik die ertussen ?

Thanks :thumb:


Expression.JPG
 
Laatst bewerkt:
Ik zou dit via een Cursor doen, althans voor het uitvoeren van je herhaalde code..


DECLARE @Pictures @NVARCHAR(150)
SET @Pictures = (SELECT TOP 1 [npictures] FROM [jouTabel])

--Hier zit nu feitelijk een aantal in van een record, als ik je goed volg het aantal plaatjes die er zijn.

IF @Pictures = '0'
BEGIN
Query statement op basis van 0 plaatjes.. update, select.. whatever
END

IF @Pictures = '1'
BEGIN
UPDATE [jouTabel] SET [JebestandsnaamVeld] = [JeBestandsnaamVeld] + '_' + (SELECT [Npictures] FROM [JouTabel])
END

IF @Pictures = '2'
BEGIN
Query
END

etc...

Wat ik niet kan volgen is de logica van je DB. Dus je hebt een veld met een aantal (b.v. 3 in Npictures) en een veld wat daarbij hoort met Bestandsnamen ? Daar staat dan initieel 3 x afbeelding ofzo ?

De update query die bij actie 1 zit doet het volgende :

1. lees aantal in npictures uit
2. lees bestandsnaam uit
3. plak bestandsnaam + _ + npictures nummer aan elkaar...

wat je over zou houden is Afbeelding.jpg_3

SELECT REPLACE([Bestandsnaamveld], '.', '_'+(SELECT [Npictures] FROM [jouTabel])+'.')

Dit laatste stukje doet : bestandsnaamveld (afbeelding.jpg), hierin zoekt hij naar een punt (.) en dit vervangt hij met _x. zodat je Afbeelding_x.jp over zou houden. de X wordt gevuld door wat in npictures zou zitten.. Warrig antwoord maar gezien informatie (of het ontbreken ervan) the best ik kan doe ;)

Wat zou helpen :

- welke tabellen ?
- welke velden ?
- hoe is data gevuld

B.v., je zegt npictures bevat aantal plaatjes wat ik raar vind. Ik zou eerder verwachten dat je b.v. een record had :

npictures - bestandsnaam - id kolom ofzo
1 Afbeelding.jpg 123

Hoe ziet dit eruit als er b.v. 3 plaatjes zijn ? heb je dan een record 3 - Afbeelding.jpg waarbij dat dan eigenlijk verteld dat de site werkt met Afbeelding_1/2/3.jpg ?

PS: Query is als voorbeeld en heeft nog geen cursor er om heen. Wel nodig als je zoiets zou gebruiken omdat je updates binnen de IF's anders alles updaten.
 
Laatst bewerkt:
Da's snel :)
Dank je voor je uitgebreide antwoord.

Ik hoef alleen geen verwijzing naar bestandsnaam-veld en database enzo.
Je klikt binnen bedoelt prg. op een veld en dan opent het scherm op bijgevoegde afbeelding.
Die koppelingen zijn er dus al.

Maar ga sowieso even met deze structuur aan de slag.
2B continued.
 
Update:

Dit werkt wel:
IF ([CSV_COL(39)] = "1",CONCAT("http://graphics.edc-internet.nl/500/" , [CSV_COL(35)]) ,"")​

Dit werkt niet:
IF ([CSV_COL(39)] = "1" THEN CONCAT("http://graphics.edc-internet.nl/500/" , [CSV_COL(35)]))
[ELSE ""]​
END IF​

Terwijl dit de syntax is
IF search_condition THEN statement_list
[ELSEIF search_condition THEN statement_list] ...
[ELSE statement_list]​
END IF​

Wat doe ik nu fout ?

fout.jpg
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan