[PHP] Sacar registros y poner en 2 columnas

W

Buenas noches mediavideros.

Pues mirar resulta que estoy haciendo unas cosillas en una pagina donde tengo por ejemplo 15 marcas de ordenadores metidas en la base de datos.

Me gustaria saber como puedo hacer para que me salga en dos columnas sin necesidad de tener que hacer 2 consultas. Por ejemplo una cosa asi:

Acer---------------------------------Advent
IBM----------------------------------Toshiba

etc... vamos que digamos que me lo saque en orden

12
34
56

no del estilo

1 4
2 5
3 6

Yo he pensado en dentro de el while (es mas lo he probado pero no me funciona bien) poner un contador

cont=0
if cont==0 ->
TR TD ACER
cont=1
/TD
else
TD ADVENT
/TD /TR
cont=0

en principio funcionaba bien o eso parecia, pero luego parece que no termina de funcionar del todo...

Gracias. Si necesitais mas info la posteare.

Nemox

Es fácil, solo tienes que coger los resultados que tengan id impar por un lado, y los pares por otro. Y esto lo puedes hacer o bien con dos consultas o bien a la hora de mostrar los resultados.
Si tu página no es muy grande yo no me preocuparía por hacer dos consultas a la bd, pero por otro lado estaría mejor construido el script si sólo hicieses una consulta ya que es la presentación lo que quieres variar y no la lógica (no se si me explico).

Si eliges esta opción, puedes hacer un bucle while en el que guardes los resultados de la consulta en dos arrays, pares[] e impares[] según sea par o impar el índice del array de resultados, y luego ya en el while "normal" muestras los resultados imprimiendo los dos arrays a la vez.

Tengo esto un poco oxidao pero creo que así se podría hacer.

SeiYa

#2 no es cierto, porque algunos motores de bases de datos,si borras un ID no te mueve los demás y puede que tengas 2 ids impares seguidas.

Deberías hacer esto por ejemplo:

?><table><?php
$aux = 2;
while(tarari)
{
&nbsp;&nbsp;&nbsp;if($aux % 2 == 0)
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?><tr><td>caca</td><?php
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$aux = 1;
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;?><td>pis</td></tr><?php
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$aux++;
&nbsp;&nbsp;&nbsp;}
}

//Aqui comprobamos como se quedó al final
if($aux == 2)
{
&nbsp;&nbsp;&nbsp;?></table><?php
}
else
{
&nbsp;&nbsp;&nbsp;?><td>[&]nbsp;</td></tr></table><?php
}

die('you son of a bitch');

Nemox

#3 cierto.... no había caído. Mea culpa.

SeiYa

Culpa meada.

W

Gracias a los 2, la verdad es que la forma que has dicho seiya era como yo lo hacia salvo que a mi me faltaba el ultimo paso. Comprobar como quedaba.

Por cierto ya de paso. Yo tengo en la base de datos 3 tablas, dl_tipo - dl_marca - dl_relacion

dl_tipo
tipo_id(INT 11 Autoincrement)
tipo_nombre(VARCHAR 50)

dl_marca
marca_id(INT 11 Autoincrement)
marca_nombre(VARCHAR 50)
marca_web(VARCHAR 250)

dl_relacion
relacion_id(INT 11 Autoincremet)
tipo_id(INT 11 Index > dl_tipo->tipo_id)
marca_id(INT 11 Index > dl_marca->marca_id)

Vamos que relacion es la tabla que relaciona dl_tipo con dl_marca, ya que son Maximo N Minimo 0(dl_tipo hacia dl_marca) y Maximo N Minimo 1(dl_marca hacia dl_tipo) en el esquema E/R

El problema viene que cuando quiero sacar el nombre de una marca tengo que hacer 2 consultas

id1 en dl_tipo = tipo_nombre -> Sobremesas


$sql = mysql_query("SELECT * FROM dl_relacion WHERE tipo_id=1");

while($row = mysql_fetch_array ($sql) ) {

······· $sql2 = mysql_query("SELECT * FROM dl_marca WHERE marca_id=".$row['marca_id']);
······· while($row2 = mysql_fetch_array($sql2) ) {
·····················echo $row2['marca_nombre'];
······· }

Pero claro el problema es que aunque haga la consulta poniendole al final un ORDER BY marca_nombre ASC no me lo ordena por nombre... asi que supongo que la consulta deberia ser asi

$sql = mysql_query("SELECT * FROM dl_relacion dr, dl_marca dm WHERE (tipo_id=1) AND (dr.marca_id=dm.marca_id) ORDER BY dm.marca_nombre ASC

Es correcto?

Me autorespondo XD Funciona.
Por cierto si quereis ver como esta quedando o a que me referia www.mes-glories.es/project/?mod=tipos

Luego moveros por el menu, XD el diseño es un poco cutre la verdad pero poco a poco.

SeiYa

No necesitas hacer 2 consultas puedes hacer:

SELECT *, nombre_marca AS (SELECT marca_nombre FROM dl_marca WHERE dl_marca.marca_id = dl_relacion.marca_id) FROM dl_relacion WHERE tipo_id=1

W

Esta tambien me ha funcionado

SELECT * FROM dl_relacion dr, dl_marca dm WHERE (tipo_id=1) AND (dr.marca_id=dm.marca_id) ORDER BY dm.marca_nombre ASC

Gracias igualmente Seiya ^^

SeiYa

#8 de todos modos un consejo.

Nunca hagas SELECT * ... NUNCA.

Haz únicamente un select de los campos que necesites, si necesitas más, pues metes más, pero nunca metas todos porque haces una consulta más gorda devolviendo más campos que no necesitas.

W

Que tal entonces un

SELECT marca_nombre, marca_imgurl FROM dl_relacion dr, dl_marca dm WHERE (tipo_id=1) AND (dr.marca_id=dm.marca_id) ORDER BY dm.marca_nombre ASC

ya que saco solamente el nombre y la imagen

SeiYa

No lo se XD tu haz el select de lo que necesites, los * los dejas a las expresiones regulares xD

Usuarios habituales

  • SeiYa
  • willy__chaos
  • Nemox