none
Doble DO WHILE en la misma tabla RRS feed

  • Pregunta

  • Buenos días

    Tengo una consulta que me realentiza muchisimo. Agradeceria profundamente vuestra ayuda.
    Me pasa en muchas páginas, así que necesito optimizarla.

    Se trata cuando he de pasar 2 veces por la misma tabla [tbPedidos] y he hacer un DO WHILE.
    Necesito Escribir algunos campos y la verdad no se bien como optimizarla (Sin con INNER JOIN, LEFT JOIN, etc) y no se como escribir los campos de tb1 y tb2 ya que la tabla tiene el mismo nombre.



    Este es un ejemplo sencillo del problema que tengo. Gracias por la ayuda por adelantado


    ssqltb1 = "SELECT * FROM tbPedidos WHERE Cliente= 'CLIENTE-0023' "
    Set tb1 = Server.CreateObject("adodb.RecordSet")
    tb1.Open ssqltb1,ConData
    Do While Not tb1.EOF

    Response.write "<br>El " & tb1("PedidoNumero") & " de fecha: " & tb1("FechaPedido")

    ssqltb2 = "SELECT * FROM tbPedidos WHERE PedidoRelacionado = "&tb1("PedidoRelacionado")&"' "
    Set tb2 = Server.CreateObject("adodb.RecordSet")
    tb2.Open ssqltb2,ConData
    Do While Not tb2.EOF
    Response.Write " Fue comprado al proveedor: " tb2("NombreEmpresa") & " En la fecha: " & tb2("FechaPedido")
    tb2.MoveNext
    Loop
    tb2.Close
    Set tb2 = Nothing

    tb1.MoveNext
    Loop
    tb1.Close
    Set tb1 = Nothing
    miércoles, 15 de junio de 2016 7:47

Respuestas

  • Deberías recuperar todos los datos en una única consulta haciendo una JOIN contra la misma tabla de pedidos.

    Algo así:

    ssqltb1 = "SELECT P.PedidoNumero, P.FechaPedido, PR.NombreEmpresa, PR.FechaPedido AS FechaRelacionado" & _
    	" FROM tbPedidos P" & _
    	" INNER JOIN tbPedidos PR ON PR.PedidoRelacionado = P.PedidoRelacionado" & _
    	" WHERE Cliente= 'CLIENTE-0023'" & _
    	" ORDER BY P.PedidoNumero"
    Set tb1 = Server.CreateObject("adodb.RecordSet")
    tb1.Open ssqltb1,ConData
    Do While Not tb1.EOF
    	Response.write "<br>El " & tb1("PedidoNumero") & " de fecha: " & tb1("FechaPedido")
    	Response.Write " Fue comprado al proveedor: " tb1("NombreEmpresa") & " En la fecha: " & tb1("FechaRelacionado")
    	tb1.MoveNext
    Loop
    tb1.Close
    Set tb1 = Nothing


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...


    miércoles, 15 de junio de 2016 8:18

Todas las respuestas

  • Deberías recuperar todos los datos en una única consulta haciendo una JOIN contra la misma tabla de pedidos.

    Algo así:

    ssqltb1 = "SELECT P.PedidoNumero, P.FechaPedido, PR.NombreEmpresa, PR.FechaPedido AS FechaRelacionado" & _
    	" FROM tbPedidos P" & _
    	" INNER JOIN tbPedidos PR ON PR.PedidoRelacionado = P.PedidoRelacionado" & _
    	" WHERE Cliente= 'CLIENTE-0023'" & _
    	" ORDER BY P.PedidoNumero"
    Set tb1 = Server.CreateObject("adodb.RecordSet")
    tb1.Open ssqltb1,ConData
    Do While Not tb1.EOF
    	Response.write "<br>El " & tb1("PedidoNumero") & " de fecha: " & tb1("FechaPedido")
    	Response.Write " Fue comprado al proveedor: " tb1("NombreEmpresa") & " En la fecha: " & tb1("FechaRelacionado")
    	tb1.MoveNext
    Loop
    tb1.Close
    Set tb1 = Nothing


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...


    miércoles, 15 de junio de 2016 8:18
  • Muchas gracias Asier. Me ha sido muy muy util tu respuesta/ayuda!
    miércoles, 15 de junio de 2016 9:25