Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: KateLibby en 31 Enero 2022, 09:58 am



Título: Subquery returns more than 1 row
Publicado por: KateLibby en 31 Enero 2022, 09:58 am
Hola! Tengo una consulta que me devuelve el siguiente error:

Código:
08:42:32 Warning: mysqli_query(): (21000/1242): Subquery returns more than 1 row in /usr/home/..........

Es este query:

Código:
SELECT SQL_CALC_FOUND_ROWS p.*, 
(SELECT meta_value FROM wp_postmeta pm WHERE pm.post_id = p.ID AND meta_key = 'localidad') AS 'localidad',
(SELECT meta_value FROM wp_postmeta pm WHERE pm.post_id = p.ID AND meta_key = 'direccion') AS 'direccion',
(SELECT meta_value FROM wp_postmeta pm WHERE pm.post_id = p.ID AND meta_key = 'c.p.') AS 'cp',
(SELECT meta_value FROM wp_postmeta pm WHERE pm.post_id = p.ID AND meta_key = 'codigo') AS 'codigo',
(SELECT GROUP_CONCAT(t.name SEPARATOR ';') FROM wp_terms t, wp_term_taxonomy tx, wp_term_relationships tr
WHERE t.term_id = tx.term_id AND tx.term_taxonomy_id = tr.term_taxonomy_id AND tr.object_id = p.ID AND tx.taxonomy = 'gama' ORDER BY tx.term_taxonomy_id) AS 'gama',
(SELECT t.name FROM wp_terms t, wp_term_taxonomy tx, wp_term_relationships tr
WHERE t.term_id = tx.term_id AND tx.term_taxonomy_id = tr.term_taxonomy_id AND tr.object_id = p.ID AND tx.taxonomy = 'pais' ORDER BY tx.term_taxonomy_id) AS 'pais',
(SELECT t.term_id FROM wp_terms t, wp_term_taxonomy tx, wp_term_relationships tr
WHERE t.term_id = tx.term_id AND tx.term_taxonomy_id = tr.term_taxonomy_id AND tr.object_id = p.ID AND tx.taxonomy = 'pais' ORDER BY tx.term_taxonomy_id) AS 'id_pais',
(SELECT t.name FROM wp_terms t, wp_term_taxonomy tx, wp_term_relationships tr
WHERE t.term_id = tx.term_id AND tx.term_taxonomy_id = tr.term_taxonomy_id AND tr.object_id = p.ID AND tx.taxonomy = 'provincia' ORDER BY tx.term_taxonomy_id) AS 'provincia',
(SELECT meta_value FROM wp_postmeta pm
WHERE pm.post_id = p.ID AND meta_key = 'localizacion') AS 'localizacion'
FROM wp_posts p
WHERE 1=1 AND p.post_type = 'distribuidor' AND (p.post_status = 'publish' OR p.post_status = 'acf-disabled' OR p.post_status = 'private')
ORDER BY p.post_title ASC


He conseguido que me funcione en un par de servidores, pero en el que necesito alojarlo es el que me devuelve el error mencionado.

¿Alguien sabe si hay alguna configuración que se pueda cambiar en el servidor para que no devuelva error o alguna otra forma de hacer el query?

Gracias de antemano.


Título: Re: Subquery returns more than 1 row
Publicado por: KateLibby en 31 Enero 2022, 13:04 pm
Lo he podido resolver añadiendo LIMIT 1 a todos los subqueries. Por ejemplo:

Código:
(SELECT meta_value FROM wp_postmeta pm WHERE pm.post_id = p.ID AND meta_key = 'localidad' LIMIT 1) AS 'localidad',

De todas formas no sería la mejor solución, ya que los datos del resultado del query podrían no ser correctos. Por suerte, en mi caso el resultado es el mismo con el LIMIT 1 y sin él.