Francamente no tengo idea de dónde puedes haber sacado un ejemplo de uso del INNER JOIN utilizando FIND_IN_SET()... Porque ni siquiera tienen cómo relacionarse.
FIND_IN_SET() devuelve , al menos en MySQL, un valor entero positivo que representa la posición en que un valor A se encuentra dentr de un vlaor B, siendo el valor B una cadena de texto con valores separados por comas ('1, 2, 56, 98, 0').
Cómo puedes encajar eso en un INNER JOIN me cuesta entenderlo.
Si fuese que el campo de busqueda es un VARCHAR, que contiene un conjunto de valores separados por comas, eso sería uncampo multivaluado, y ya deberías saber que esos campos están prohibids en las bases de datos relacionales. Son un atentado a la integridad referencial y a la consistencia de datos, además de dar resultados erráticos en las consultas.
En definitiva, tu consulta (poniendo los alias que no pusiste), quedaría mas o menos así:
Código MySQL:
Ver original P.id_prd,
P.sku_prd,
P.idctg_prd,
P.name_prd,
P.description_prd,
P.money,
P.price_prd,
P.visible_prd,
P.image_hlg_prd
products_prd P
(C.id_ctg
!= 107 OR C.idctg_ctg
!= 23 OR C.idctg_ctg
!= 107) AND highlight_home_prd
= 1 AND (date_publication
<= NOW()
Pero para poder darte una sugerencia tenemos que revisar ese JOIN que has creado, y volverlo algo coherente y lógico.
¿Puedes explicar mejor cuáles son los campos que se relacionan entre ambas tablas y cómo lo hacen?
Porque tal pareciera que tienes categorías con subcategorías, y cada producto pertenece a una u otra.
¿Es así?
Si eso es lo que tienes, la consulta está mal escrita, porque para realizara con ese esquema la tabla de categorías se debe invocar dos veces, de modo de recrear la relación consigo misma.