¿Cómo puedo especificar la cláusula WHERE al combinar varias tablas? -- php campo con sql campo con pdo camp Relacionados El problema

How can I specify the where clause when combining multiple tables?


1
vote

problema

Español

Tengo una consulta que debería contar todas mis filas especificadas. Esta es mi consulta:

  SELECT COUNT(*) AS Som      FROM users      RIGHT JOIN stoftesten ON users.username = stoftesten.gebruikersid      RIGHT JOIN eindgesprekken ON users.username = eindgesprekken.gebruikersid      RIGHT JOIN rapportages ON users.username = rapportages.gebruikersid      WHERE users.rol = 'geleider' and users.basis = '1' and stoftesten.status = 'Niet beoordeeld' or eindgesprekken.status = 'Niet beoordeeld' or rapportages.status = 'Niet beoordeeld';   

Debería obtener el número 2, porque esa es la cantidad de registros que tengo de acuerdo con la consulta que quiero, pero me da 40. ¿Qué estoy haciendo mal aquí?

Tablas:

usuarios

  ------------------------------------------- | username (PK) | basis | rol      | name | ------------------------------------------- | user01        | VLB   | geleider | Ben  | | user02        | GER   | geleider | Tom  | -------------------------------------------   

stoftesten

  ------------------------------------------- | id (PK) | gebruikersid (FK:id) | status | ------------------------------------------- | 1       | user01   | Niet beoordeeld    | | 2       | user01   | Beoordeeld         | -------------------------------------------   

Relatorage

  ------------------------------------------- | id (PK) | gebruikersid (FK:id) | status | ------------------------------------------- | 1       | user01   | Beoordeeld         | | 2       | user01   | Beoordeeld         | -------------------------------------------   

eindgespekken

  ------------------------------------------- | id (PK) | gebruikersid (FK:id) | status | ------------------------------------------- | 1       | user01   | Niet beoordeeld    | | 2       | user01   | Beoordeeld         | -------------------------------------------   

Quiero que la consulta seleccione los registros de 'StoFTESTEN', 'Eindgesprekken' y 'Relatores' donde el estado es 'Niet Beoordeeld' y la base del usuario es 'VLB'. Entonces quiero contar estas filas y obtener un número. En este caso, quiero ver el número 2.

Original en ingles

I have a query that should count all of my specified rows. This is my query:

SELECT COUNT(*) AS Som      FROM users      RIGHT JOIN stoftesten ON users.username = stoftesten.gebruikersid      RIGHT JOIN eindgesprekken ON users.username = eindgesprekken.gebruikersid      RIGHT JOIN rapportages ON users.username = rapportages.gebruikersid      WHERE users.rol = 'geleider' and users.basis = '1' and stoftesten.status = 'Niet beoordeeld' or eindgesprekken.status = 'Niet beoordeeld' or rapportages.status = 'Niet beoordeeld'; 

I should get the number 2, because thats the amount of records I have according to the query I want, but it gives me 40. What am I doing wrong here?

Tables:

users

------------------------------------------- | username (PK) | basis | rol      | name | ------------------------------------------- | user01        | VLB   | geleider | Ben  | | user02        | GER   | geleider | Tom  | ------------------------------------------- 

stoftesten

------------------------------------------- | id (PK) | gebruikersid (FK:id) | status | ------------------------------------------- | 1       | user01   | Niet beoordeeld    | | 2       | user01   | Beoordeeld         | ------------------------------------------- 

rapportages

------------------------------------------- | id (PK) | gebruikersid (FK:id) | status | ------------------------------------------- | 1       | user01   | Beoordeeld         | | 2       | user01   | Beoordeeld         | ------------------------------------------- 

eindgesprekken

------------------------------------------- | id (PK) | gebruikersid (FK:id) | status | ------------------------------------------- | 1       | user01   | Niet beoordeeld    | | 2       | user01   | Beoordeeld         | ------------------------------------------- 

I want the query to select the records from 'stoftesten', 'eindgesprekken' and 'rapportages' where the status is 'Niet beoordeeld' and the user basis is 'VLB'. Then I want to count these rows and get a number. in this case, I want to see the number 2.

        
         
         

Lista de respuestas

0
 
vote

Sospecho que desea contar usuarios que cumplen con cualquiera de esas condiciones. Si es así, recomiendo EXISTS en lugar de une:

  SELECT COUNT(*) AS Som FROM users u WHERE u.rol = 'geleider' and u.basis = '1' AND        (EXISTS (SELECT 1                FROM stoftesten s                WHERE s.gebruikersids = u.username AND                      s.status = 'Niet beoordeeld'               ) OR        EXISTS (SELECT 1                FROM eindgesprekken e                WHERE e.gebruikersids = u.username AND                      e.status = 'Niet beoordeeld'               ) OR        EXISTS (SELECT 1                FROM rapportages r                WHERE r.gebruikersids = u.username AND                      r.status = 'Niet beoordeeld'               )       );   
 

I suspect you want to count users that meet any of those conditions. If so, I recommend EXISTS rather than joins:

SELECT COUNT(*) AS Som FROM users u WHERE u.rol = 'geleider' and u.basis = '1' AND        (EXISTS (SELECT 1                FROM stoftesten s                WHERE s.gebruikersids = u.username AND                      s.status = 'Niet beoordeeld'               ) OR        EXISTS (SELECT 1                FROM eindgesprekken e                WHERE e.gebruikersids = u.username AND                      e.status = 'Niet beoordeeld'               ) OR        EXISTS (SELECT 1                FROM rapportages r                WHERE r.gebruikersids = u.username AND                      r.status = 'Niet beoordeeld'               )       ); 
 
 

Relacionados problema

4  ¿PDO Bindparam permite que no existen variables?  ( Does pdo bindparam allow not existent variables ) 
Como durante el desarrollo, configuro error_reporting(-1); , por lo que estaba seguro de que cada error de sintaxis se mostrará por PHP. Es, por ejemplo, ...

0  Excepción al ejecutar () con declaraciones preparadas  ( Exception on execute with prepared statements ) 
Esto realmente se parece a una tarea simple, pero aún así, pateando la cabeza contra la pared las últimas horas y buscando la web para que cualquier pista par...

3  PDO_MYSQL vs MySQLI al usar Zend_DB  ( Pdo mysql vs mysqli when using zend db ) 
Si estoy usando clases Zend_DB para abstractar mis consultas de la base de datos Backend, ¿hace una diferencia en qué controlador MySQL utilizo, PDO_MYSQL vs....

2  Error con la sobrescritura de Bindparam en PHP  ( Error with bindparam overwriting in php ) 
Esto es un poco extraño, y podría estar codificando esto completamente equivocado, por lo que he golpeado el mismo error dos veces en dos días, en partes comp...

0  Error de SQLite no hay tal columna  ( Sqlite error no such column ) 
¿Alguien aquí tiene alguna experiencia con este error? Solo si uso la cláusula WHERE, recibo este error. Yo uso PHP PDO para obtener los resultados. y e...

0  Encuentra desajuste entre variables y tokens unidos en yii  ( Find mismatch between variables and bound tokens in yii ) 
Estoy usando una declaración preparada para insertar datos. Estoy recibiendo el 'Invalid parameter number: number of bound variables does not match number of...

0  PHP: (PDO) MySQL forma más efectiva de agregar pendientes a un valor devuelto de DB  ( Php pdo mysql most effective way to add sting to returned value out of db ) 
En una base de datos MySQL, almaceno algunos nombres de imágenes sin la ruta exacta. Entonces, lo que me gusta hacer es agregar la ruta antes de cargar la mat...

1  PHP PDO Excepción "No se pudo encontrar conductor" pgsql  ( Php pdo exception could not find driver pgsql ) 
Así que siempre recibo una excepción de PDO cuando intento crear mi DB en el constructor de mi clase Mapper. En esta línea: $this->db = new PDO($dsn, $db_c...

0  La declaración PDO preparada no funciona con esta consulta  ( Pdo prepared statement wont work with this query ) 
estoy teniendo esta consulta: $query = $db->query("SELECT posts.post_topic_id, posts.post_content, ...

0  Conversión de MySQL a PDO Nombre de usuario Problema de confirmación  ( Converting from mysql to pdo username confirmation issue ) 
¿Cómo convierto este MySQL a un PDO? Tengo problemas que intentan obtener el código para verificar si el nombre de usuario ya existe. //Check if user alrea...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos