PHP - Dos select en al misma consulta

 
Vista:
sin imagen de perfil

Dos select en al misma consulta

Publicado por Santiago (4 intervenciones) el 20/11/2017 07:39:35
Buenos dias

Tengo esta esta función en en un model de codeigniter. Donde realizo cos cosnultas en ele mismo query, pero no soy capaz de que me muestre las margenes en ordenadas según el campo position "ORDER BY images.position", Alguna idea?


Gracias


1
2
3
4
5
6
7
8
9
function getViviendas($tipo){
	$query='SELECT *, propiedades.pid as pid FROM propiedades LEFT JOIN pueblos ON propiedades.poblacion=pueblos.id_pueblo LEFT JOIN (SELECT * FROM images GROUP BY images.fid ORDER BY images.position) AS img ON propiedades.pid=img.pid WHERE propiedad="Vivienda" ';
	if($tipo=='venta')
		$query.='AND status=0 ';
	$query.='GROUP BY propiedades.pid ORDER BY propiedades.fecha_upd DESC';
	//echo $query;
	$query=$this->db->query($query);
	return $query->result_array();
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de santi
Val: 588
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Dos select en al misma consulta

Publicado por santi (204 intervenciones) el 23/11/2017 19:14:21
Hola,

a ver, primero creo que deberías usar la estructura que facilita codeigniter porqué es bastante más visual, del tipo:

1
$this->db->select('*')->from('propiedades')->where(...

A parte de esto, prueba de añadir un "desc" (descendiente) o un "asc" (ascendente) para el "ORDER BY".

En este caso en Codeigniter pudes hacerlo de la siguiente manera:

1
$this->db->order_by('images.position', 'desc');//orden descendiente

Sinó prueba de ordernarlo por id a ver si te funciona,

Suerte ;)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Dos select en al misma consulta

Publicado por Santiago (4 intervenciones) el 27/11/2017 19:55:30
Lo probe el defini ascendente o descendente:

$query='SELECT *, propiedades.pid as pid FROM propiedades LEFT JOIN pueblos ON propiedades.poblacion=pueblos.id_pueblo LEFT JOIN (SELECT * FROM images GROUP BY images.fid ORDER BY `position` DESC) AS img ON propiedades.pid=img.pid WHERE propiedad="Vivienda" ';

pero sigue igual no lo ordena, lo tengo ya asi echo todo, no quiero cambiar la estructura, gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Dos select en al misma consulta

Publicado por Santiago (4 intervenciones) el 28/11/2017 08:52:09
He comprobado que con una version anterior de Mysql si funciona con la ultima version con MariaDb no funciona, alguna idea
gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro
Val: 1.634
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Dos select en al misma consulta

Publicado por Alejandro (839 intervenciones) el 23/11/2017 21:59:02
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
Este query esta mal
1
SELECT * FROM images GROUP BY images.fid ORDER BY images.position

Desconosco tus registros y el resultado que quieres obtener pero tratando de traducir tu query supongo que seria algo asi

1
2
3
4
SELECT *, propiedades.pid FROM propiedades
LEFT JOIN pueblos ON propiedades.poblacion=pueblos.id_pueblo
LEFT JOIN images ON propiedades.pid=images.pid
WHERE propiedades.propiedad="Vivienda" ORDER BY images.position
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Dos select en al misma consulta

Publicado por Santiago (4 intervenciones) el 27/11/2017 20:02:49
con tu solucion me da error;
1
2
$query='SELECT *, propiedades.pid as pid FROM propiedades LEFT JOIN pueblos ON propiedades.poblacion=pueblos.id_pueblo LEFT JOIN images ON propiedades=images.fid WHERE propiedades.
propiedad="Vivienda" ORDER BY position DESC,  AS img ON propiedades.pid=img.pid WHERE propiedad="Vivienda" ';

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro
Val: 1.634
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Dos select en al misma consulta

Publicado por Alejandro (839 intervenciones) el 28/11/2017 17:04:47
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
Esta...
1
2
3
4
5
SELECT *, propiedades.pid as pid FROM propiedades
LEFT JOIN pueblos ON propiedades.poblacion=pueblos.id_pueblo
LEFT JOIN images ON propiedades=images.fid
WHERE propiedades.propiedad="Vivienda" ORDER BY position DESC,
AS img ON propiedades.pid=img.pid WHERE propiedad="Vivienda" ';
no fue mi solucion, y obvio esta mal.

No puede haber 2 "where" en una consulta, quizas los has visto y te confunde pero son subconsultas Ej.
1
SELECT 1 AS Uno, (SELECT 0 WHERE 0=0) AS Cero WHERE 1=1
El select entre parentesis es la subconsulta obteniendo como resultado un registro con los campos Uno=1 y Cero=0

"Order by" va hasta el final
1
2
ORDER BY position DESC //<= Correcto
ORDER BY position DESC,  AS img ON... //<= Incorrecto

Debes identificar los campos que requieres en tu consulta
Debes identificar los campos relacionados entre tablas
Debes establecer las condiciones de busqueda
Al final el ordenamiento deseado

1
2
3
4
5
SELECT campos FROM tablaPrincipal AS Alias0
LEFT JOIN otraTabla1 AS Alias1 ON Alias1.campoArelacionar=Alias0.campoArelacionar
LEFT JOIN otraTabla2 AS Alias2 ON Alias2.campoArelacionar=Alias0.campoArelacionar
WHERE Alias0.algunCampo=valorBuscado AND Alias2.algunCampo=valorBuscado
ORDER BY Alias1.campoOrdenamiento DESC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar