Google
Web dns.bdat.net

[PHP-ES] Re: Hacer un query a un Array [medium]

Write haof XML files: Rafael Salazar ( rsalazar(EN)innox.com.mx)
Fecha: vie 18 mar 2005 - 18:05:35 CET


        Opinión al final...

Oswaldo Otero wrote:
> Hola a todos, quiero hacer algo como mandar un query a un arry, en la
> clausula where eso se puede, creen que existe otra forma de hacerlo.
> Seria algo como esto.
[···]
> //So we have to make and array, for get all the clients, taht this
> doctor have to attend...
> //This query is for get, what client work with the login doctor...
> //By the way, we make a array, for consult the order table...
> $sql='SELECT * FROM `clientdoctor` WHERE `doctorid` ="'.$doctorid.'"';
[···]
> //Well Done, we got the array, so let us try if we can run another
> query where the WHERE condition is executable into and
> array=====>>>$arr_clients.
>
> $sql1='SELECT * FROM `orders` WHERE `clientid`="'.$arr_clients.'"
> and `status`="N"';
[···]
> Si ven en la sentencia $sql1, quiero meter por clausula un array, eso
> se puede???? Como podria hacerse algo similar...

        La respuesta rápida es Sí, pero tendrías que hacer una pequeña
modificación a la sentencia SQL, para que quedara algo así:
   $sql1 = 'SELECT * FROM orders '
          .'WHERE( clientid IN( '. implode(',', $arr_clients) .' ) )';

        Ahora, analizando un poco más el problema, me parece que tu solución,
aunque funcionaría, no es la más adecuada. Por lo que veo tienes dos
tablas, una con los clientes (por doctor) y otra con los pacientes que
están esperando; primero recuperas todos los clientes del doctor y
después verificas cuáles de ellos están "pedientes".

        Si bien el número de registros muy probablemente será reducido, y muy
probablemente no verás mayor problema en el rendimiento de la
aplicación, sería mejor que investigaras un poco más de SQL para hacer
un trabajo un pelín mejor. Una idea sería cambiar esas sentencias SQL
por una que se auxilie de JOINs, un ejemplo podría ser:
   SELECT *
   FROM orders AS o
         INNER JOIN clientdoctor AS c USING( clientid )
   WHERE( c.doctorid = $doctorid AND status = "N" )

El uso de "*" generalmente no es buena idea, haz un análisis de los
campos que en realidad necesitas y sólo recupera éstos (de hecho es
mejor listarlos todos, que utilizar "*") De igual forma, las funciones
"*_fetch_array" (como mysql_fetch_array) usualmente te permiten elegir
el tipo de array a retornar; en tu caso haces uso de un array
asociativo, por lo que sería bueno que lo pidieras como tal (si mal no
recuerdo, por defecto te devuelve tanto el array asociativo, como el de
índices numéricos --y si de por sí se estás recuperando campos muy
probablemente innecesarios, imagínate tenerlos duplicados)

        En fín, espero haber sido de alguna ayuda.

-- 
Atentamente,
J. Rafael Salazar Magaña
Innox - Innovación Inteligente
+52 (33) 3615 5348 ext. 205
rsalazar(EN)innox.com.mx
http://www.innox.com.mx
-- 
PHP Spanish Localization Talk Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


Este archivo fue generado por hypermail 2.1.7 : sáb 19 mar 2005 - 01:01:24 CET