Foros del Web » Programando para Internet » PHP »

Consecutivo con tablas en mysql y php

Estas en el tema de Consecutivo con tablas en mysql y php en el foro de PHP en Foros del Web. PUEDEN AYUDARME TENGO 3 TABLAS AREA IdArea Clave Nombre TIPODOCUMENTO IdTipoDoc Clave Nombre DOCUMENTOS idDocumentos Clave IdArea IdTipoDoc la cuestión de esto es que necesito ...
  #1 (permalink)  
Antiguo 25/10/2013, 15:20
 
Fecha de Ingreso: octubre-2013
Mensajes: 30
Antigüedad: 10 años, 6 meses
Puntos: 0
Pregunta Consecutivo con tablas en mysql y php

PUEDEN AYUDARME TENGO 3 TABLAS

AREA
IdArea
Clave
Nombre

TIPODOCUMENTO
IdTipoDoc
Clave
Nombre

DOCUMENTOS
idDocumentos
Clave
IdArea
IdTipoDoc

la cuestión de esto es que necesito concatenar al seleccionar en un formulario Área y TipoDocumento, las cuales el valor del select es su clave de cada una de estas y debo concatenarlas y aparte darle un consecutivo, para que estos valores se asignen al campo Clave de la tabla Documentos hasta allí el consecutivo me sale con esta consulta

Código MySQL:
Ver original
  1. SELECT @conse:=@conse+1 AS conse, CONCAT(d.Clave,"-",a.Clave,"-",@conse) as Cadena, a.Clave, d.Clave
  2. FROM  (SELECT @conse:=0) r ,Area a, DocumentosTipo d, Documentos o  
  3. WHERE a.IdArea=o.area
  4. AND d.IdDocTipo=o.IdDocTipo
  5. AND a.clave= '$Area'
  6. AND d.Clave='$Documentos'

me quedaría asi: PR-AA-1

pero lo que se quiere es que dependiendo el proceso y el área de un consecutivo diferente por ejemplo si la clave del tipodocumento fuera FO y el área AA debería quedar FO-AA-1 y si el área cambiara pero el tipoDocumento no debería quedar asi FO-AI-1 o si el tipodocumento cambiara pero el área no debería dar PR-AA-1, se que se tiene que realizar una validación pero nose como realizarla o que deberíamos hacer para que salga asi

Podrían ayudarme

Última edición por gnzsoloyo; 25/10/2013 a las 16:59 Razón: Sin etiquetar
  #2 (permalink)  
Antiguo 26/10/2013, 09:44
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consecutivo con tablas en mysql y php

gemeli16,
antes de sugerirte nada, te haré algunas aclaraciones. Entiendo perfectamente la necesidad de tener un número consecutivo, que junto con las otras dos claves formarían una clave compuesta en la tabla documentos, pero lo que no comprendo es por qué quieres generar ese número en una consulta con SELECT. Eso no insertará el valor en la tabla. Necesitas programación para buscar primero el número más alto insertado para esa área y tipo de documento en esa misma tabla, y a continuación insertar el valor superior. Luego te bastará con hacer un select con sus INNER JOIN para mostrarlo.
Por otra parte, no nos has dicho si realmente esos tres valores van a ser una clave primaria compuesta, que sería lo lógico, y no volver a cargar el valor de dos campos más algo en el primero. Es decir que en Clave de documentos no cargarías por ej. PR-AA-1, sino simplemente 1.
Tampoco nos dices si el borrado de un registro en esa última tabla conllevaría renumerar de nuevo todos los de esa área y tipo de documento.
No olvides que para almacenar el dato tienes que insertarlo antes, y es en ese momento de insertar cuando controlas qué número almacenar para ese documento de un área y tipo de documento determinado. Cosa distinta es que no quieras insertarlo, sino que desees generarlo al vuelo con no sé qué objetivo. Para eso tendrías que hacer algo parecido a lo que propones pero sobre una subconsulta. Nada nos dices sobre cuál es el criterio para ordenar, pero por lo que veo es el orden de inclusión en la tabla. Acláranos un poco más sobre ese número y para qué lo usaras.
  #3 (permalink)  
Antiguo 28/10/2013, 09:33
 
Fecha de Ingreso: octubre-2013
Mensajes: 30
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: Consecutivo con tablas en mysql y php

Cita:
Iniciado por jurena Ver Mensaje
gemeli16,
antes de sugerirte nada, te haré algunas aclaraciones. Entiendo perfectamente la necesidad de tener un número consecutivo, que junto con las otras dos claves formarían una clave compuesta en la tabla documentos, pero lo que no comprendo es por qué quieres generar ese número en una consulta con SELECT. Eso no insertará el valor en la tabla. Necesitas programación para buscar primero el número más alto insertado para esa área y tipo de documento en esa misma tabla, y a continuación insertar el valor superior. Luego te bastará con hacer un select con sus INNER JOIN para mostrarlo.
Por otra parte, no nos has dicho si realmente esos tres valores van a ser una clave primaria compuesta, que sería lo lógico, y no volver a cargar el valor de dos campos más algo en el primero. Es decir que en Clave de documentos no cargarías por ej. PR-AA-1, sino simplemente 1.
Tampoco nos dices si el borrado de un registro en esa última tabla conllevaría renumerar de nuevo todos los de esa área y tipo de documento.
No olvides que para almacenar el dato tienes que insertarlo antes, y es en ese momento de insertar cuando controlas qué número almacenar para ese documento de un área y tipo de documento determinado. Cosa distinta es que no quieras insertarlo, sino que desees generarlo al vuelo con no sé qué objetivo. Para eso tendrías que hacer algo parecido a lo que propones pero sobre una subconsulta. Nada nos dices sobre cuál es el criterio para ordenar, pero por lo que veo es el orden de inclusión en la tabla. Acláranos un poco más sobre ese número y para qué lo usaras.


Ok Gracias por responder, lo que estoy realizando es lo siguiente

tengo dos select donde cada uno de ellos me toma datos de tablas en mysql, esto lo estoy realizando con php
Código HTML:
Ver original
  1. <select name="Documentos" id="Documentos"  >
  2.                           <option >Seleccione Opcion..</option>
  3.                           <?php        do {  ?>
  4.                           <option  value="<?php echo  $row_Rs3["Clave"]?>"><?php echo  $row_Rs3["Nombre"]?> </option>
  5.                           <?php } while ($row_Rs3 = mysql_fetch_assoc($Rs3)); ?>
  6.                       </select></td>
  7.                       <td colspan="2" class="tittab"><label></label></td>
  8.                       <td>&nbsp;</td>
  9.                       <td>&nbsp;</td>
  10.                       <td width="120">&nbsp;</td>
  11.                       <td></td>
  12.                     </tr>
  13.                     <tr>
  14.                       <td bgcolor="#0E2F7A" class="tittab">Area</td>
  15.                       <td><select name="Area"  id="Area"  onchange="MM_jumpMenu('parent',this,0)" >
  16.                           <option value="">Seleccione Opcion..</option>
  17.                           <?php        do {  ?>
  18.                           <option value="<?php echo $row_Rs4["clave"]?>" ><?php echo  $row_Rs4["Nombre"]?> </option>
  19.                           <?php } while ($row_Rs4 = mysql_fetch_assoc($Rs4)); ?>
  20.                       </select>

al tomar los dos datos de forma automática quisiera que me los mandara a un textbox dentro de la misma pagina, pero como todavía no eh podido ver como hacerle, estoy mandando los datos a otra pagina y ejecuto mi query
Código PHP:
<?php
       
require_once('conexion.php');
$Documentos=$_REQUEST["Doc"];
$Area=$_REQUEST["Area"];



$query_Rs1"'SELECT @conse:=@conse+1 AS conse, CONCAT(d.Clave,"-",a.Clave,"-",@conse) as Cadena, a.Clave, d.Clave FROM  (SELECT @conse:=0) r ,Area a, DocumentosTipo d, Documentos o  WHERE a.IdArea=o.area AND d.IdDocTipo=o.IdDocTipo AND a.clave= '$Area' AND d.Clave='$Documentos'";
$Rs1 mysql_query($query_Rs5$conexion) or die(mysql_error());
$row_Rs1 mysql_fetch_assoc($Rs5);
$cadena=$row_Rs['Cadena'];
$con=$row_Rs['conse'];

echo 
$con;

?>
desde php no me manda nada ya que quiero que meimprima el resultado y me manda este error "Query was empty" y si lo ejecuto directo en mysql me da lo que quiero de esta forma

conse |Cadena |Clave |Clave
1 |PR-AA-1 | AA | PR

La cuestión esto es porque no me lo muestra en php y como validar para que me de el consecutivo que deberia de llevar dependiendo la combinación de claves

Última edición por gnzsoloyo; 28/10/2013 a las 10:09 Razón: Sin etiquetado
  #4 (permalink)  
Antiguo 28/10/2013, 10:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consecutivo con tablas en mysql y php

PHP es OFF TOPIC en MySQL.
Para el PHP debes preguntar en el foro correspondiente.

Movido a PHP, para no tener que borrar el código de programacion.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 28/10/2013, 14:24
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Consecutivo con tablas en mysql y php

gemeli16
la lógica no creo que sea esa.
Si vas a cargar eso, tu lógica sería algo parecida a esta. Cuando tienes el área y tipo de documento, buscas en la base el número máximo correspondiente a esa área y tipo de documento. Eso puedes hacerlo con un MAX(). Si no devuelve nada, insertas el 1; si devuelve un valor máximo, insertas ese valor + 1.
Eso es lo que yo haría.

Etiquetas: mysql, select
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 13:28.