Foros de discusión El foro de la T.I.A.
Foro no oficial sobre Mortadelo y Filemón y el cómic en general
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entre para ver sus mensajes privadosEntre para ver sus mensajes privados   LoginLogin 

¿Alguien con nivel medio-alto en php y mysql?
Ir a página 1, 2  Siguiente
 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Off Topic
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Sadlymistaken
Agente con honores


Registrado: 14 Nov 2008
Mensajes: 4173

MensajePublicado: 03/05/2010 10:13    Asunto: ¿Alguien con nivel medio-alto en php y mysql? Responder citando

Pues nada... yo dejo aquí la pregunta..
si alguien aparece interesado en AYUDAR al prójimo, aqui me hallo con unas preguntas...
Volver arriba
Ver perfil de usuario Enviar mensaje privado
bichomen
Agente doble


Registrado: 29 Jul 2008
Mensajes: 9478
Ubicación: bichomen

MensajePublicado: 03/05/2010 12:08    Asunto: Responder citando

A lo mejor te puedo ayudar


bichomen
_________________
Arrow Colección
Arrow Mercadillo
¡¡Si tienes el numero de 19 de Cinturó negre - Yawara! contacta conmigo!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Sadlymistaken
Agente con honores


Registrado: 14 Nov 2008
Mensajes: 4173

MensajePublicado: 03/05/2010 12:21    Asunto: Responder citando

Se trata de hacer un cruce de tablas.
La sentencia MySql me sale, pero no se plasmarla en php...
Pues necesito .. bueno no se realmente lo que necesito, si una suma... y un Procesure o algo asi..
El caso es que Mysql no admite CROSS JOIN, ni TRANSFORM PIVOT.. como hace SQL o ACCESS..

Mira te dejo, dos fotos. Una con mis tablas, y otra con lo que quiero hacer...

Se trata de una página dinámica (las páginas dinámicas sencillas se hacerlas.. pero esta no.. porque la tabla se repite hacia abajo, y hacia la derecha...)

La sentencia (q no se si estará bien):
Código:

Select `12tab_todo_c`.c_orden,
  `01tab_h1`.h_titulo1,
  `02tab_h2`.h_titulo2,
  `06tab_c_edicione`.c_edicion,
  `06tab_c_edicione`.c_portada,
  `06tab_c_edicione`.c_datos,
  `04tab_c_nombre`.c_nombre,
  `03tab_editoriales`.editorial_nombre,
  `05tab_c_numero`.c_numero
From `01tab_h1`
Inner Join   `12tab_todo_c` On `01tab_h1`.id_h_titulo1 = `12tab_todo_c`.id_h_titulo1_tc
Inner Join `03tab_editoriales` On 03tab_editoriales`.id_editoriales = `12tab_todo_c`.id_c_editoriales_t
Inner Join `04tab_c_nombre` On `04tab_c_nombre`.id_c_nombre = `12tab_todo_c`.id_c_nombre_t
Inner Join `05tab_c_numero` On `05tab_c_numero`.id_c_numero = `12tab_todo_c`.id_c_numero_t
Inner Join `06tab_c_edicione` On `06tab_c_edicione`.id_c_edicion =   `12tab_todo_c`.id_c_edicion_t
Inner Join `02tab_h2` On `02tab_h2`.id_h_titulo2 = `12tab_todo_c`.id_h_titulo2_tc


Y las imagenes:


Volver arriba
Ver perfil de usuario Enviar mensaje privado
bichomen
Agente doble


Registrado: 29 Jul 2008
Mensajes: 9478
Ubicación: bichomen

MensajePublicado: 03/05/2010 12:39    Asunto: Responder citando

Esta tarde noche te lo miro con más calma y te digo algo.


bichomen
_________________
Arrow Colección
Arrow Mercadillo
¡¡Si tienes el numero de 19 de Cinturó negre - Yawara! contacta conmigo!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Sadlymistaken
Agente con honores


Registrado: 14 Nov 2008
Mensajes: 4173

MensajePublicado: 03/05/2010 12:43    Asunto: Responder citando

bichomen escribió:
Esta tarde noche te lo miro con más calma y te digo algo.


bichomen


Gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
bichomen
Agente doble


Registrado: 29 Jul 2008
Mensajes: 9478
Ubicación: bichomen

MensajePublicado: 03/05/2010 19:05    Asunto: Responder citando

Me he tomado la liberta de modificar algunos nombres para aclararme más, e visto un pequeño fallo, o eso me ha parecido, pruébalo:

Cita:
Select 12.c_orden, 01.h_titulo1, 02.h_titulo2, 06.c_edicion, 06.c_portada, 06.c_datos, 04.c_nombre, 03.editorial_nombre, 05.c_numero
From 01
Inner Join 01 On 01.id_h_titulo1 = 12.id_h_titulo1_tc
Inner Join 02 On 02.id_h_titulo2 = 12.id_h_titulo2_tc
Inner Join 06 On 06.id_c_edicion = 12.id_c_edicion_t
Inner Join 04 On 04.id_c_nombre = 12.id_c_nombre_t
Inner Join 03 On 03.id_editoriales = 12.id_c_editoriales_t
Inner Join 05 On 05.id_c_numero = 12.id_c_numero_t



bichomen
_________________
Arrow Colección
Arrow Mercadillo
¡¡Si tienes el numero de 19 de Cinturó negre - Yawara! contacta conmigo!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Sadlymistaken
Agente con honores


Registrado: 14 Nov 2008
Mensajes: 4173

MensajePublicado: 03/05/2010 23:31    Asunto: Responder citando

Gracias Bichomen. Efectivamente era la tabla 01...y tal. Buen ojo. Graciassss si si siiii

Bueno, como veo que te has metido en materia, cosa que agradezco mucho, voy a proseguir... para destacar exactamente el problema..
Para ejemplo usaremos... bueno, como veo que te gusta Patomás... jajajaja esto..

A la página dinámica le llega como variable la id del número de la colección...
Por ejemplo:
ID_NUMERO: 2067
EDITORIAL: EDICIONES M
COLECCIÓN: PATOMÁS ADVENTURAS
NÚMERO: 33

ajam... sigo..

Ese número 33, tuvo 2 ediciones.

La 1ª Edición de 1995... con los datos A, y la portada A
La 2ª Edición de 2000... con los datos B, y la portada B

Pero una diferencia en sus historietas
La primera edición tiene las aventuras "EL BARBERO - PARTE 1" y "EL BARBERO - PARTE 2"
La segunda edición tiene las aventuras "EL BARBERO - PARTE 1" y "EL SACAPUNTAS - ENTERA"

(todo esto es un ejemplo)

Con la sentencia MySQL que creé antes (pero colocadas las columnas en orden... cosa que hice mal) me daría esta tabla:



Y ahora, para que quede todo más reducido, y podamos entendernos, voy a concatenar los campos, y así nos será más facil entendernos..
(pongo el nombre de las tablas, como haces tu... con el número sólo... )

Select
CONCAT( 12.c_orden,'-', 01.h_titulo1,'-', 02.h_titulo2) As HISTORIETA,
CONCAT(06.c_edicion,'-',06.c_portada,'-', 06.c_datos) As INFORMACION,
CONCAT(04.c_nombre,'-',03.editorial_nombre,'-',05.c_numero) As EJEMPLAR
From 01
Inner Join 01 On 01.id_h_titulo1 = 12.id_h_titulo1_tc
Inner Join 02 On 02.id_h_titulo2 = 12.id_h_titulo2_tc
Inner Join 06 On 06.id_c_edicion = 12.id_c_edicion_t
Inner Join 04 On 04.id_c_nombre = 12.id_c_nombre_t
Inner Join 03 On 03.id_editoriales = 12.id_c_editoriales_t
Inner Join 05 On 05.id_c_numero = 12.id_c_numero_t

Y esto me da este resultado:



Y aquí viene lo que me tienes que ayudar... como paso esa tabla a esto:



Ay, espero que puedas ayudarme...
Llevo recorridos 4 chats de ayuda PHP... (q por cierto, la gente, lo que menos hacen es hablar de Php...)
Y 2 foros phpeneros.net y forosdeinformatica.com...
Pero no me ayudan :(

Alguna manera habrá de hacerlo, no?? Jum...
Volver arriba
Ver perfil de usuario Enviar mensaje privado
bichomen
Agente doble


Registrado: 29 Jul 2008
Mensajes: 9478
Ubicación: bichomen

MensajePublicado: 04/05/2010 00:51    Asunto: Responder citando

Bueno con SQL a lo mejor no, pero con PHP, se puede trampea,r yo creo que si se puede tengo que mirarlo con más paciencia, pero creo que sí, mañana por la mañana o por la tarde lo mirare con más paciencia, igualmente, no se si conoces este foro:

:arrow: Foros del Web


bichomen
_________________
Arrow Colección
Arrow Mercadillo
¡¡Si tienes el numero de 19 de Cinturó negre - Yawara! contacta conmigo!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
bichomen
Agente doble


Registrado: 29 Jul 2008
Mensajes: 9478
Ubicación: bichomen

MensajePublicado: 04/05/2010 20:18    Asunto: Responder citando

Bueno, me a costado y lo que e echo a sido teorizando ya que no lo e puesto en practica, doy por supuesto que ya tienes un nivel alto en PHP y SQL por lo que doy muchas cosas por sentadas, así no tengo que estar escribiendo código:

La idea es primero recuperar los datos de la consulta anterior metiéndolos en un array, a trabes de un FOR una vez recuperado los datos, hacer 2 consultas para recuperar por separado la información y la historieta, hacemos otro FOR para recuperar los datos de la consulta primaria y a la vez ir armando la tabla a base de comparar los datos de las otras 2 consultas con la primaria.

Como veras esto más que código es seudo código y lo tendrás que trabajar, cualquier duda me la preguntas posiblemente con la practica salgan fallos que habrá que ir corrigiendo.

Código:
$filas = mysql_count_rows;

where:
{

$id
$ejemlar = consulta[];
$historia = consulta[];
$informacion = consulta[];

for $i=0; $i<=$filas; $i++
{

   $id[$i] = ($id);
   $h[$i] = ($historia);
   $inf[$i] = ($informacion);
   $e[$i] = ($ejemplar);
}

}

consulta 1 para recuperar información agrupados, para que no se repita la informacion
consulta 2 para recuperar historieta agrupados, para que no se repita la historieta

for $i=0; $i<$filas; $i++
{

   <table>
   <tr><td>

      echo $e[$i]

   </td>
      where(consulta1)
      {
         if($información == $inf[i])
         {

            <td>            

            echo $información

            </td>
         }
      }
   </tr>
      where(consulta2)
      {
         if($historieta == $h[i]
         {

            <tr><td>            

            echo $historieta

            
            </td><td>


               If($información == $inf[i])
               {
                  echo "SI";
               }
               else
               {
                  echo "NO";
               }
            

            </td></tr>
         }
      }

             </table>

}



bichomen
_________________
Arrow Colección
Arrow Mercadillo
¡¡Si tienes el numero de 19 de Cinturó negre - Yawara! contacta conmigo!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Sadlymistaken
Agente con honores


Registrado: 14 Nov 2008
Mensajes: 4173

MensajePublicado: 04/05/2010 21:11    Asunto: Responder citando

Shocked Guaaaauuuu

Mañana lo miro con más calma...
Lo creo, y lo ejecuto, a ver si furula.
Y lo retoco claro.. si acaso hay algo que no veo...
Y si veo que no lo consigo te vuelvo a preguntar alguna dudilla.

Oye, Bichomen, Muchas gracias eh... Esto, si que es Apoyo Internauta a tutiplen, toy muy agradecido por tu entusiasmo, no me esperaba tanto. Gracias gracias chi chi chi chiiiii Wooooow

Edito:

POr cierto, he estado navegando por Foros del Web, como me aconsejaste.. Y bueno, me he pasado hora y media buscando temas a ver donde podria pillar "la idea"... Muchas gracias...

Yo había pensado en esto:
Meter en una tabla de 4 celdas...



La parte A, B y C así se hacen mucho más simples...
Y la parte D es la que tendría que trabajar..

De todos modos, sabiendo que me has dejado este regalito hoy... seguro iré por tu camino.
Tengo muuuuuucho por hacer. Pfff...
Nunca pensé que una web diera tanto quebradero de cabeza..

Gracias.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Sadlymistaken
Agente con honores


Registrado: 14 Nov 2008
Mensajes: 4173

MensajePublicado: 05/05/2010 18:40    Asunto: Responder citando

cosas: tube que cambiar mysql_count_rows por mysql_num_rows porque el count no lo aceptaba mysql... al menos haciendo pruebas de printf $list me daba error... pero con el num no..

Bueno, este es el código resultante, pero me da error en el

where($consulta1)
{

pero raramente... da fallo en.. LA LLAVE... no en el Where.
Y por cierto, no tengo nivel avanzado de Php.. ni siquiera conozco eso del WHERE.. no se usarlo... El For.. no se ni como no me lio..
Bueno.. ¿Escribí algo mal?

Gracias.

Código:

<?php
$filas = mysql_num_rows($todo);
where:
{
$ejemplar = $row_todo['EJEMPLAR'];
$historia = $row_todo['HISTORIETA'];
$informacion = $row_todo['INFORMACION'];

for ($i=0; $i<=$filas; $i++)
{

   $id[$i] = ($id);
   $h[$i] = ($historia);
   $inf[$i] = ($informacion);
   $e[$i] = ($ejemplar);
}

}

$consulta1 = $consulta_agrupada_de_informacion;
$consulta2 = $consulta_agrupada_de_historietas;

for ($i=0; $i<$filas; $i++)
{

echo "<table><tr><td>";
echo $e[$i];
echo "</td>";
      where($consulta1)
     {
         if($información == $inf[i])
         {

            echo "<td>";           

            echo $información;

            echo "</td>";
         }
      }
   echo "</tr>";
      where($consulta2)
      {
         if($historieta == $h[i]
         {

            echo "<tr><td>";           

            echo $historieta;

           
            echo "</td><td>";


               If ($información == $inf[i])
               {
                  echo "SI";
               }
               else
               {
                  echo "NO";
               }
           

            echo "</td></tr>";
         }
      }

             echo "</table>";



?>

Volver arriba
Ver perfil de usuario Enviar mensaje privado
bichomen
Agente doble


Registrado: 29 Jul 2008
Mensajes: 9478
Ubicación: bichomen

MensajePublicado: 05/05/2010 19:59    Asunto: Responder citando

Bueno disculpa, fue un error mió donde pongo where quiero decir while

y si es mysql_num_rows

Bueno supongo que sabes como conectar con PHP a una base de datos

Código:
$db = mysql_connect('localhost','usuario','contraseña');
mysql_select_db('base de datos',$db);
   
if(mysql_error())
{
echo 'Error al conectar con la base de datos';
}


Aquí realizamos una consulta y recuperamos su resultado en $result

Código:
$sql = "select * from tabla";
$result = mysql_query($sql) or die("SQL tabla: ".mysql_error());


Una vez obtenido el resultado necesitaremos realizar un bucle, para cada registro devuelto

Código:
while($consulta = mysql_fetch_assoc($result))
{
       echo $consulta['campo de la tabla'];
}


Espero que esto te sirva para aclararte un poco más.


bichomen
_________________
Arrow Colección
Arrow Mercadillo
¡¡Si tienes el numero de 19 de Cinturó negre - Yawara! contacta conmigo!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
bichomen
Agente doble


Registrado: 29 Jul 2008
Mensajes: 9478
Ubicación: bichomen

MensajePublicado: 05/05/2010 20:10    Asunto: Responder citando

Aquí te corrijo las primeras líneas:

Código:
<?php
         $filas = mysql_num_rows($result);
 
while($consulta = mysql_fetch_assoc($result))
{
         $ejemplar = $consulta['EJEMPLAR'];
         $historia = $consulta['HISTORIETA'];
         $informacion = $consulta['INFORMACION'];



bichomen
_________________
Arrow Colección
Arrow Mercadillo
¡¡Si tienes el numero de 19 de Cinturó negre - Yawara! contacta conmigo!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
bichomen
Agente doble


Registrado: 29 Jul 2008
Mensajes: 9478
Ubicación: bichomen

MensajePublicado: 05/05/2010 20:15    Asunto: Responder citando

Estructura de un FOR:

Código:
for($i = 1; $i <= 10; $i++)
{
    echo $i;
}


Estructura de un IF:

Código:
if ($a > $b)
{
  echo "a es mayor que b";
}
else
{
  echo "a no es mayor que b";
}



bichomen
_________________
Arrow Colección
Arrow Mercadillo
¡¡Si tienes el numero de 19 de Cinturó negre - Yawara! contacta conmigo!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Sadlymistaken
Agente con honores


Registrado: 14 Nov 2008
Mensajes: 4173

MensajePublicado: 05/05/2010 21:59    Asunto: Responder citando

Bueno he corregido lo que me has dicho y la cosa queda así.
Bueno, las 2 consultas las omito por que son largas. De todos modos, las suelo poner arriba... como no estan dentro de ningun While ni ningun if ni for... pues espero no perturbe ponerlo arriba, con el resto de las consultas

Código:

<?php
$filas = mysql_num_rows($todo);
 
while($consulta = mysql_fetch_assoc($todo))
{
   $ejemplar = $consulta['EJEMPLAR'];
   $historia = $consulta['HISTORIETA'];
    $informacion = $consulta['INFORMACION'];
   for ($i=0; $i<=$filas; $i++)
   {
         $id[$i] = ($id);
         $h[$i] = ($historia);
         $inf[$i] = ($informacion);
         $e[$i] = ($ejemplar);
   }
}

for ($i=0; $i<$filas; $i++)
{

echo "<table><tr><td>";
echo $e[$i];
echo "</td>";
      while($consulta1)
     {
         if($informacion == $inf[i])
         {

            echo "<td>";           

            echo $informacion;

            echo "</td>";
         }
      }
   echo "</tr>";
      while($consulta2)
      {
         if($historieta == $h[i])
         {
echo "<tr><td>";           

            echo $historieta;

           
            echo "</td><td>";


               If ($informacion == $inf[i])
               {
                  echo "SI";
               }
               else
               {
                  echo "NO";
               }
           

            echo "</td></tr>";
         }
      }

             echo "</table>";



?>


Y da fallo en la linea 83 que es:
if($informacion == $inf[i])

Notice: Use of undefined constant i - assumed 'i'
Notice: Undefined variable: inf i
Notice: Undefined variable: informacion

Probé despues a cambiar ese [i] por un [$i]..
Por si es que había que poner el nombre de la variable con su $

Pero igualmente daba fallo..

Luego intenté cambiar el inicio de $i en el for
en vez de comenzar en $i=0 puse $i=1
Suponiendo yo que eso de i debe ser el número de fila... y no suele existir una fila cero...
Pero vamos, que siguió dando error..

He vuelto al de arriba, y te lo pongo, para ver si es que me he confundido, olvidado o cargado algo..

Siento darte tanto trabajo, pero yo solico no creo que lo consiga.. Embarassed :oops:

Gracias un montón.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Publicar nuevo tema   Responder al tema    Foros de discusión -> Off Topic Todas las horas son GMT + 2 Horas
Ir a página 1, 2  Siguiente
Página 1 de 2

 
Cambiar a:  
Puede publicar nuevos temas en este foro
No puede responder a temas en este foro
No puede editar sus mensajes en este foro
No puede borrar sus mensajes en este foro
No puede votar en encuestas en este foro


Powered by phpBB © 2001, 2005 phpBB Group