Hallo Ingrid,
"...WHERE
(SELECT count(cat.cid) FROMcatsets
As catset INNER JOIN categories AS cat ON catset.cid=cat.cid WHERE catset.id=list.id AND cat.name LIKE '%ball%') > 0"
soweit ich das allmählich überblicke, sollten es DISTINCT und ein paar INNER JOINs es doch tun. Ein inakzeptabler Lösungsversuch:
SELECT DISTINCT
list.label,
list.id,
list.entry_id
FROM `list_pics` list -- AS versteht nicht jedes aktuelle DBMS :-)
INNER JOIN refs ref -- Wo ist da der echte Nutzen des Alias?
ON ref.id = list.id
INNER JOIN catsets cs
ON ref.id = cs.id
INNER JOIN categories c
ON cs.cid = c.cid
WHERE ref.id != '163' -- Deine irrelevante Bedingung
AND cs.cid = '6' -- die gesuchte Kategorie
AND c.name LIKE '%ball%' -- die zulässigen Namen
)
ORDER BY position
LIMIT 1 -- was nicht jedes DBMS versteht
Versagt schon einmal bei MS SQL-Server, Oracle, MS Access, selbst den derzeit aktuellen Versionen :-)
Wenn Du es wirklich DB-unabhängig haben willst, so nutze einen Querybuilder eines Datenbankabstraktionslayers einer API, der sämtliche existierenden DBMS-Versionen unterstützt.
Freundliche Grüße
Vinzenz