Foros del Web » Programando para Internet » PHP »

Contar número columnas

Estas en el tema de Contar número columnas en el foro de PHP en Foros del Web. Hola, Buenas, no sé si es que estoy un poco dormido, pero me he quedado bloqueado en este asunto. Tengo una tabla en la que ...
  #1 (permalink)  
Antiguo 04/03/2010, 03:21
 
Fecha de Ingreso: octubre-2008
Mensajes: 177
Antigüedad: 15 años, 6 meses
Puntos: 1
Contar número columnas

Hola,

Buenas, no sé si es que estoy un poco dormido, pero me he quedado bloqueado en este asunto.

Tengo una tabla en la que la 1ª columna es la de usuario, luego en las siguientes columnas hay una serie de datos que unos son NULL y otros no.

¿Cómo puedo contar las COLUMNAS que no son NULL? Que me diga... 8... o 3... o 2...

Ahora mismo no caigo de ninguna de las maneras :|

He probado con códigos similares a:

SELECT TABLE_NAME, COUNT(*)
FROM INFORMATION_SCHEMA. COLUMNS WHERE TABLE_NAME = 'usuarios'
GROUP BY TABLE_NAME

Pero nada...

Gracias!
  #2 (permalink)  
Antiguo 04/03/2010, 03:27
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Contar número columnas

Con código sql o código php?

Si es sql, el foro apropiado es del de sql....... si es php...... aqui :P
  #3 (permalink)  
Antiguo 04/03/2010, 03:31
 
Fecha de Ingreso: octubre-2008
Mensajes: 177
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Contar número columnas

Tienes razón Eleazan! Disculpa.

Bueno, en php sería algo como...

Código:
$sql = 'SELECT TABLE_NAME, COUNT(*)'
        . ' FROM INFORMATION_SCHEMA. COLUMNS WHERE TABLE_NAME = \'usuarios\''
        . ' GROUP BY TABLE_NAME';
La cuestión es que esta sentencia funciona bien, me dice el nº de columnas que tiene una tabla... pero yo quisiera añadir la condición que las columnas no sean NULL... y no sé por dónde meterlo :S
  #4 (permalink)  
Antiguo 04/03/2010, 04:13
 
Fecha de Ingreso: octubre-2008
Mensajes: 177
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Contar número columnas

Bueno, pues por si a alguien le sirve en un futuro, lo he solucionado así:

Código:
$todoscampos = mysql_query("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA. COLUMNS WHERE TABLE_NAME = 'usuarios' AND COLUMN_NAME != 'usuario'");

	if ($rowcampos = mysql_fetch_array($todoscampos)) {
	
		$num_campos = 0;
	
		do {
	
		$nombrecampo = $rowcampos["COLUMN_NAME"];
		
		$camponull2 = mysql_query("SELECT `$nombrecampo` FROM `usuarios` WHERE usuario = '$usuario'");
		$camponull = mysql_result($camponull2,0,0);
		
			if ($camponull != "") {
			
			$num_campos++;
			
			}
		
		} while ($rowcampos = mysql_fetch_array($todoscampos));
		
	}

Lo he hecho así porque el nombre de columnas es variable y crece y decrece según un sistema de registro anterior, en el que puedes elegir qué campos registrar y demás y si no existe pues hace un ALTER TABLE y demás... entonces al no saber exactamente los campos que pueden haber en un momento dado, tenía que contar el nº de columnas para un registro ...

Saludos!
  #5 (permalink)  
Antiguo 04/03/2010, 04:31
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Contar número columnas

No lo entiendo...

Quiero decir, quizás lo enfoco de otra manera pero...

con mysql_fetch_array hay dos formas de recorrer el array... con el nombre de las columnas... o bien, con números.

Por ejemplo, con una tabla simple que sea
ID - Nombre - Edad

sería:
Código PHP:
$sql 'SELECT * FROM `tabla`';
$r mysql_query($sql,$link);
while( 
$arr mysql_fetch_array($sql) ) {
  echo 
'<br>ID: '.$arr[0].' o bien '.$arr['ID'];
 echo 
'<br>Nombre: '.$arr[1].' o bien '.$arr['Nombre'];
 echo 
'<br>Edad: '.$arr[2].' o bien '.$arr['Edad'];

No se si me explico... pero yo lo habría enfocado por ahí :)
  #6 (permalink)  
Antiguo 04/03/2010, 04:42
 
Fecha de Ingreso: octubre-2008
Mensajes: 177
Antigüedad: 15 años, 6 meses
Puntos: 1
Respuesta: Contar número columnas

Hola Eleazan,

El problema es que yo no sé el nombre de las columnas de la tabla, porque en un formulario anterior con muchas opciones cada usuario elige cuáles desea activar. Entonces en la tabla si esa opción no existe para ningún usuario crea una columna con ese nombre.

Luego la opción se puede borrar también. Por lo que si todos los usuarios de la tabla tienen esa opción NULL la columna se borra.

Luego otra condición es que cada usuario no puede elegir más de un número de opciones determinadas que añadir, por eso necesitaba contar las columnas.

Para comprenderlo, es un sistema de afiliación lo que estoy creando y cada usuario elige qué opciones desea promocionar colocando su tracking link. Podría haberlo hecho a lo burro, y colocar todas las opciones posibles como 1 columna, pero luego otra variable es que yo como administrador voy añadiendo opciones cada semana.

No sé si se ha acabado de entender :\

Gracias por eso!
  #7 (permalink)  
Antiguo 04/03/2010, 05:35
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: Contar número columnas

Si, más o menos suponía eso!

De todas formas, si así te sirve, va bien!.

Otra cosa, sería q lo hubieras hecho distinto:

3 tablas

`categoria`
id - categoria

`usuario`
id - user - pass - mail etc!

`userYcat`
id - usuario - categoria

Y seria en plan si el usuario 1 (sitoatic mismo!) se afilia a la categoria 1 (forosdelweb.com por decir algo!) insertarias en userYcat default, 1, 1

Para contarlas por un usuario, sería un simple count :)
(Ah, y deberias poner como unique en userYcat usuario&categoria (ambas juntas!)9

Pro bueno, si ya lo tienes solucionado... sólo me picaba la curiosidad de pq lo hiciste así :D

Etiquetas: columnas, mysql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:55.