Foros del Web » Programando para Internet » PHP »

Varias Condiciones Juntas

Estas en el tema de Varias Condiciones Juntas en el foro de PHP en Foros del Web. Hola. Tengo una consulta a base de datos donde aparece este fragmento: Código: $query->select($db->quoteName(array(''field_2'))) ->from($db->quoteName('#_users')) ->where($db->quoteName('user_id') . ' = '. $db->quote($user->id). ' AND '.$db->quoteName('field_2') . ...
  #1 (permalink)  
Antiguo 03/10/2018, 11:20
 
Fecha de Ingreso: noviembre-2005
Mensajes: 850
Antigüedad: 13 años, 1 mes
Puntos: 8
Varias Condiciones Juntas

Hola.

Tengo una consulta a base de datos donde aparece este fragmento:

Código:
$query->select($db->quoteName(array(''field_2')))
      ->from($db->quoteName('#_users'))
      ->where($db->quoteName('user_id') . ' = '. $db->quote($user->id). ' AND '.$db->quoteName('field_2') . ' = '. $db->quote('0'));

Donde el "0" de quote('0') al final corresponde a una opción.

Ahora querría añadir otras a "0" (1, 3, y 4). Creo que es utilizando "or" y la verdad es que me da fallo siempre sin saber por qué.

Agradecería cualquier indicación al respecto.
  #2 (permalink)  
Antiguo 03/10/2018, 14:47
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.191
Antigüedad: 10 años, 9 meses
Puntos: 1016
Respuesta: Varias Condiciones Juntas

Puedes usar en mysql

WHERE field_2 in (0,1,3,4,22,55) y todo lo que quieras dentro del paréntesis delimitado por coma (,)

Ahora bien tu código se parece mucho a laravel, no se si sea tu caso pero de ser asi puedes hacer uso de

->whereIn('field_2', array(0,1,3,4,22,55))
__________________
Toda ayuda se proporciona exclusivamente en el foro, no skype, no mensajes privados u otro medio....
  #3 (permalink)  
Antiguo 27/10/2018, 13:30
 
Fecha de Ingreso: noviembre-2005
Mensajes: 850
Antigüedad: 13 años, 1 mes
Puntos: 8
Respuesta: Varias Condiciones Juntas

No funciona o no lo he aplicado correctamente.

Se trata de un Joomla! y el código completo es:

Código:
<?php
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select($db->quoteName(array('user_id','field_2')))
      ->from($db->quoteName('#_users'))
      ->where($db->quoteName('user_id') . ' = '. $db->quote($user->id). ' AND '.$db->quoteName('field_2') . ' = '. $db->quote('0'));
$db->setQuery($query);
$result = $db->loadObjectList();

(...)
}
?>
Se trata de comprobar que se cumple el field_2 con "0" en el ejemplo, pero necesito que funcione con varios valores.

Última edición por JUMASOL; 29/10/2018 a las 06:30
  #4 (permalink)  
Antiguo 29/10/2018, 06:30
 
Fecha de Ingreso: noviembre-2005
Mensajes: 850
Antigüedad: 13 años, 1 mes
Puntos: 8
Respuesta: Varias Condiciones Juntas

¿Se puede introducir wherein de algún modo en este código?
  #5 (permalink)  
Antiguo 29/10/2018, 11:48
 
Fecha de Ingreso: abril-2006
Mensajes: 166
Antigüedad: 12 años, 7 meses
Puntos: 18
Respuesta: Varias Condiciones Juntas

Cita:
Iniciado por JUMASOL Ver Mensaje
¿Se puede introducir wherein de algún modo en este código?
de poder se puede, pero lo primero que debes ahcer siempre, es buscar el origen, de donde proviene el codigo, y quien le da el soporte, ya mencionaste JOOMLA por lo cual en su documentacion,

https://docs.joomla.org/Selecting_da...g_JDatabase/es

por lo visto no tiene una funcion PHP WHERE IN, pero la funcion WHERE de JFactory::getDbo permite que el STRING sea parte SQL, por lo cual solo tendrias que poner

Código PHP:
<?php

$field_where_in 
=  ' AND  opciones IN (0,1,2,4)';
$db JFactory::getDbo();
$query $db->getQuery(true);
$query->select($db->quoteName(array('user_id','field_2')))
      ->
from($db->quoteName('#_users'))
      ->
where($db->quoteName('user_id') . ' = '$db->quote($user->id). ' AND '.$db->quoteName('field_2') . ' = '$db->quote('0') .$field_where_in );
$db->setQuery($query);
$result $db->loadObjectList();

//other code
}
?>

Última edición por tuadmin; 29/10/2018 a las 12:38 Razón: Me olvide de $field_where_in
  #6 (permalink)  
Antiguo 30/10/2018, 15:13
 
Fecha de Ingreso: noviembre-2005
Mensajes: 850
Antigüedad: 13 años, 1 mes
Puntos: 8
Respuesta: Varias Condiciones Juntas

Gracias por el aporte, pero algo falla.

Precisamente en:

Código:
$field_where_in =  ' AND  opciones IN (0,1,2,4)';
¿Es correcto así o una aproximación que hay que adecuar? En cualquier caso no funciona.

Un saludo.

¿Esto no me funciona y no sé por qué?

Código:
->where($db->quoteName('user_id') . ' = '. $db->quote($user->id). ' AND '.$db->quoteName('field_2') . ' = '. $db->quote('0') . ' AND  IN (0,1,2,4)' );

Última edición por JUMASOL; 30/10/2018 a las 15:32
  #7 (permalink)  
Antiguo 30/10/2018, 17:44
 
Fecha de Ingreso: noviembre-2005
Mensajes: 850
Antigüedad: 13 años, 1 mes
Puntos: 8
Respuesta: Varias Condiciones Juntas

Lo he sustituido por esto:

Código:
<?php
$field_where_in =  ' AND field_2  IN (0,1,2,4)';
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select($db->quoteName(array('user_id','field_2')))
      ->from($db->quoteName('#_users'))
      ->where($db->quoteName('user_id') . ' = '. $db->quote($user->id). ' AND '.$db->quoteName('field_2') . ' = '. $db->quote('0') .$field_where_in );  
$db->setQuery($query);
$result = $db->loadObjectList();

(...)
}
?>
Pero ahora solo me funciona para el primer valor. Si lo cambias, no funciona. Es decir, si el usuario (user_id) cambia su valor a, por ejemplo, "1" mediante edición del formulario, no ocurre nada.
  #8 (permalink)  
Antiguo 30/10/2018, 19:03
 
Fecha de Ingreso: abril-2006
Mensajes: 166
Antigüedad: 12 años, 7 meses
Puntos: 18
Respuesta: Varias Condiciones Juntas

Cita:
Iniciado por JUMASOL Ver Mensaje
Lo he sustituido por esto:

Código:
<?php
$field_where_in =  ' AND field_2  IN (0,1,2,4)';
$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select($db->quoteName(array('user_id','field_2')))
      ->from($db->quoteName('#_users'))
      ->where($db->quoteName('user_id') . ' = '. $db->quote($user->id). ' AND '.$db->quoteName('field_2') . ' = '. $db->quote('0') .$field_where_in );  
$db->setQuery($query);
$result = $db->loadObjectList();

(...)
}
?>
Pero ahora solo me funciona para el primer valor. Si lo cambias, no funciona. Es decir, si el usuario (user_id) cambia su valor a, por ejemplo, "1" mediante edición del formulario, no ocurre nada.
si lo pones asi. no te va a SERVIR, ya que estas entrando en contradiccion

tu QUERY , dice algo asi
Código MySQL:
Ver original
  1. SELECT  * FROM xxx WHERE id=loquesea AND field_2=0 AND field_2 IN (0,1,2,3)
al campo field_2 le estas dando dos condiciones,
  1. que field_2 sea igual a 0
  2. que field_2 tenga el valor que este entre (0,1,2,n)

muchas veces cuando abras temas de foros, encontraras respuestas, que no son COPY PASTE

Código PHP:
Ver original
  1. <?php
  2. $field_where_in =  ' AND field_2  IN (0,1,2,4)';
  3. $db = JFactory::getDbo();
  4. $query = $db->getQuery(true);
  5. $query->select($db->quoteName(array('user_id','field_2')))
  6.       ->from($db->quoteName('#_users'))
  7.       ->where($db->quoteName('user_id') . ' = '. $db->quote($user->id). $field_where_in );  
  8. $db->setQuery($query
  9. );
  10. $result = $db->loadObjectList();
  11.  
  12. (...)
  13. }
solo usa $db->quote para STRINGS,cadenas,texto o para variables dinamicas que no sean bajo tu control, si son NUMEROS o valores estaticos, no es necesario usarlo
__________________
Mis aportes te ayudaron??, te hicieron ahorrar valiosos tiempo??, si quieres puedes agradecerme con un Gracias o con una donacion
https://paypal.me/pools/c/87BTML2gwr
  #9 (permalink)  
Antiguo 31/10/2018, 08:24
 
Fecha de Ingreso: noviembre-2005
Mensajes: 850
Antigüedad: 13 años, 1 mes
Puntos: 8
Respuesta: Varias Condiciones Juntas

Gracias, así sí funciona.



La zona horaria es GMT -6. Ahora son las 12:33.