# ÉS/VAGY feltételek kombinálása SQL-lekérdezéssel

> Két lekérdezés összekapcsolása egy SQL-lekérdezésben, hogy a lista csak bizonyos elemeket tartalmazzon, másokat pedig kizárjon.

Ha egy lista olyan elemeket mutasson, amelyek egy feltételcsoportból legalább egyet teljesítenek, és egy másik csoportból egyet sem, külön lekérdezéseket kell egyetlen SQL-lekérdezésben kombinálnod. Szükséges: Elementor (ingyenes), blokkszerkesztő vagy Bricks, és aktív JetEngine.

A példa **Ingatlanok** nevű egyedi bejegyzéstípus. Azokat jelenítjük meg, amelyeknél van „Kert” vagy „Tengerre néző”, de nincs „Medence”.

## Metamező felvétele

1. A **JetEngine → Bejegyzéstípusok** oldalon nyisd meg az Ingatlanok szerkesztőjét, görgess a **Metamezők** részhez, és kattints az **Új metamező** gombra.
2. A **Felirat** legyen „Ingatlan jellemzők” (a **Név/ID** automatikusan kitöltődik), az **Objektumtípus** maradjon **Mező**, a mezőtípus **Checkbox**.
3. A **Forrás** legyen **Kézi bevitel**, és az **Új mezőopció** gombbal vegyél fel opciókat: „Medence”, „Kert”, „Tengerre néző”, „Parkoló”, „Kisállat-barát”. Az **Opció értéke** csak kisbetűs latin betűt, számot, „-” és „_” jelet tartalmazhat (például `sea-view`), az **Opció felirata** a megjelenő szöveg. Az **Is checked (selected)** kapcsolóval az opció alapból kijelölt lehet.
4. A tömbként mentés kapcsoló legyen bekapcsolva, majd kattints a **Bejegyzéstípus frissítése** gombra.

## Listázási elem

1. A **JetEngine → Listázások/komponensek** oldalon kattints az **Új elem hozzáadása** gombra.
2. A listázási forrás maradjon **Bejegyzések**, válaszd ki a bejegyzéstípust, add meg az elem nevét és a szerkesztőt (Elementor), majd kattints a létrehozás gombra.
3. Tegyél a sablonra dinamikus elemeket, például **Dynamic Link** és **Dynamic Terms** widgetet.
4. A metamező értékeihez tegyél fel egy **Dynamic Field** widgetet: a **Source** legyen **Meta Data**, és válaszd ki a metamezőt. A Checkbox mező kimenetét egy visszahívással kell átalakítani, különben hibaüzenet látszik: kapcsold be a **Filter field output** kapcsolót, és válaszd például a **Checkbox field values** visszahívást (használható még a **Multiple select field values** és a **Checked values list**).
5. Tedd közzé a sablont.

## A bevonó lekérdezés

1. A **JetEngine → Lekérdezéskészítő** oldalon kattints az **Új hozzáadása** gombra.
2. A neve legyen „Kert vagy tengerre néző”, a típus **Bejegyzések lekérdezése**. Az általános lapon válaszd az Ingatlanok bejegyzéstípust.
3. A **Meta lekérdezés** lapon kattints az **Új feltétel hozzáadása** gombra. A **Field key/name** legyen a metamező neve (`property_features`), a **Compare** értéke **Like**, a **Value** értéke `garden`.
4. Vegyél fel egy második feltételt `sea-view` értékkel.
5. A feltételek alatt a **Relation** értéke legyen **Or**: így a bejegyzés akkor kerül be, ha legalább az egyik opció ki van választva.
6. Mentsd a lekérdezést.

## A kizáró lekérdezés

1. Hozz létre új lekérdezést „Medence kizárása” névvel, **Bejegyzések lekérdezése** típussal, az Ingatlanok bejegyzéstípussal.
2. A **Meta lekérdezés** lapon vegyél fel egy feltételt: **Field key/name** `property_features`, **Compare** **Not like**, **Value** `pool`.
3. Mentsd a lekérdezést.

## Az SQL-lekérdezés

1. Hozz létre új lekérdezést „Ingatlan jellemzők lekérdezés” névvel, a típus legyen **SQL/AI lekérdezés**.
2. Az egyéni SQL-lekérdezés részben a **From table** értéke legyen **posts**, hogy a JetEngine szabványos bejegyzés-objektumokat kapjon.
3. A **Where (query clauses)** részben kattints az **Add new** gombra. A **Column** legyen **ID**, a **Compare** **In the list**. A **Value** mező melletti **Dynamic tag** gombbal válaszd a **Query Results** címkét: a **Query** mezőben az első (bevonó) lekérdezést, a **Return** mezőben a **List of items IDs** értéket. Kattints az **Apply** gombra.
4. Vegyél fel egy második feltételt: **Column** **ID**, **Compare** **In the list**, **Value**: **Query Results** a kizáró lekérdezéssel és ugyanazzal a **List of items IDs** visszatéréssel.
5. A **Where Relation** értéke legyen **And**, hogy mindkét feltétel egyszerre érvényesüljön. Lent a **Cast result to instance of object** értéke legyen **Post**, hogy a Listing Grid szabványos bejegyzésként ismerje fel az eredményt, és helyesen jelenítse meg a kiemelt képet, a metamezőket és a jelölőnégyzet-értékeket.
6. Mentsd a lekérdezést.

## Oldal és ellenőrzés

1. Szerkessz egy oldalt (vagy hozz létre újat), és tegyél rá egy **Listing Grid** elemet a listázási elemmel.
2. Az **Egyéni lekérdezés** lapon kapcsold be az **Egyéni lekérdezés használata** kapcsolót, és válaszd ki az SQL-lekérdezést.
3. Mentsd az oldalt, és nézd meg a frontenden: a lista a „Kert” és „Tengerre néző” opciójú elemeket mutatja, a „Medence” opciójúakat nem.
