Comunidad de diseño web y desarrollo en internet online

ordenar registros en mysql desde php

Citar            
MensajeEscrito el 02 Nov 2011 03:56 pm
buen dia muchachos queria preguntarles algo, como puedo hacer para que al ejecutar la consulta mysql desde php ordenar los datos de tal forma q primero me aparescan los q esten completos y q me coloque de ultimos los q les falte un "x" campo por llenar??? es posible?? horita mientras escribia se me ocurrio tener q crear un nuevo campo enum a la tabla cosa q se marque 1 (por ej) si tiene x campo lleno o 0 si no lo tiene... ayudita please :? :cry:

Por jakiras

Claber

148 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 02 Nov 2011 04:44 pm
La cláusula ORDER BY `campo` DESC dejaría los que tienen algo al inicio y nada al final. Pero depende de qué tipo de campo estés hablando...

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 02 Nov 2011 06:22 pm
gracias por tu pronta respuesta DriverOp, lo q pasa es lo siguiente, tengo una serie de registros en mi bd los cuales los mando a ordenar segun el tipo (14,12,11,10) en forma descendente, es decir q primero kiero los tipo 14, el asunto es q ademas de ese orden, quiero q dentro de cada tipo me muestre primero los q tengan lleno los campos foto y logo, luego los q tengan solo el campo logo y por ultimo los q no tengan ninguno de esos campos llenos... ¿como podria hacer?

Por jakiras

Claber

148 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 02 Nov 2011 06:36 pm
Acuulando condiciones en el ORDER BY.
No tengo tu tabla por lo que no sé cómo se llaman los campos ni sus tipos pero usando los nombres que has mencionado sería algo así:

Código MySQL :

... ORDER BY `tipo` DESC, `foto` DESC, `logo` DESC


Recuerda que todos los campos que mencionas en la cláusula ORDER BY deben aparecer en la cláusula SELECT también.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 02 Nov 2011 06:52 pm
driverop, asi como me dices probe hace rato tambn, pero el problema es q me distorciona todo, o sea, el orden q kiero es el q tienen en la bd por defecto, es decir segun su id, ya q los primeros 8 registros de la bd son los mas importantes, el problema es q al aplicar el ordenamiento de esta forma, se me vuelve una lokera todo y estos 8 registros q te menciono van a dar como a la tercera pagina O.o ... probe tambn asi

Código :

SELECT * FROM colegios ORDER BY id_cole ASC,tipo DESC,pic DESC,logo DESC


pero es como si me obviara "pic DESC" y "logo DESC"

Por jakiras

Claber

148 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 02 Nov 2011 08:04 pm
Es que mysql "no sabe" que esos 8 primeros registros son más importantes que el resto para ti. De alguna forma debes decírselo.

¿Podrías mostrarnos la tabla y luego cómo quieres que se ordene con un ejemplo pequeño?

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 02 Nov 2011 09:08 pm
tabla 'coles'

Código MySQL :

CREATE TABLE IF NOT EXISTS `coles` (
  `id_cole` int(100) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) NOT NULL,
  `direccion` text NOT NULL,
  `correo` varchar(50) NOT NULL,
  `tipo` int(4) NOT NULL,
  `pic` varchar(255) NOT NULL,
  `logo` varchar(255) NOT NULL,
  PRIMARY KEY (`id_cole`)
)



Código PHP :

<?php
$sqlStr = "SELECT * FROM coles ORDER BY tipo DESC";
//cuando hago esto obviamente lo unico q hace 
//es mostrarme primero los registros q sean tipo 14(siguiendole 12,11,10), 
//pero conservando el orden segun su clave primaria.
?>


Código PHP :

<?php
//asi la cambie luego, y aunque hace lo q kiero, o sea, 
//mostrarme primero los tipo 14 que tienen foto y logo, 
//seguido de los 14 con puro logo y al final los 14 q no 
//tienen ni o uno ni lo otro.... seguidos de los 12,11 y 10 
//con las mismas condiciones.... me coloca como primeros 
//registros los q en si en la bd estan de ultimos en cada tipo, 
//por ejemplo si en mi bd los registros del 1 al 50 son tipo 14 y 
//cumplen con la condicion, me muestra primero el 50 luego 49 y 
//asi sucesivamente hasta llegar al 1, en lugar de mostrarlos del 1 al 50...

$sqlStr = "SELECT * FROM coles ORDER BY tipo DESC,pic DESC,logo DESC";
?>


Código PHP :

<?php
//se me ocurrio cambiarlo asi...

$sqlStr = "SELECT * FROM coles ORDER BY id_cole ASC,tipo DESC,pic DESC,logo DESC";

//pero es como si omitiera las condiciones para el ordenamiento 
//tipo DESC y logo DESC.... es decir me vuelve a mostrar los registros 
//tal cual lo hacia mi primera consulta...
?>


lo que yo quiero es q conserven su orden por defecto basado en la clave primaria (id_cole) pero q se ordenen segun el tipo de tal forma q primero me muestre los q tengan datos en pic y logo, luego los que tienen solo en logo y por utimo los q no tienen ninguna de las dos cosas...

sera q es muy enredado lo q digo? :'(

Por jakiras

Claber

148 de clabLevel



Genero:Femenino  

firefox
Citar            
MensajeEscrito el 03 Nov 2011 12:08 pm
Está bien pero ¿y con qué registros estás trabajando?.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 03 Nov 2011 12:46 pm
¿como asi?

Por jakiras

Claber

148 de clabLevel



Genero:Femenino  

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.