Wątek przeniesiony 2023-01-04 10:19 z PHP przez Riddle.

Użytkownicy którzy nie wypełnili raportu

0

Witam, Prosze o pomoc z zapytaniem MySQL.

Użytkownicy wypełniają raporty godzinowe. i potrafie znaleŹć wszystkich którzy wypełnili raport za np 2023-01-03

SELECT Reports.`when`, Reports.`begin`, Reports.`end`, Reports.`userId`, Users.`contactName`, Reports.`absenceReason`, Reports.`createdAt`, Reports.`updatedAt`
FROM Reports, Users
Where Reports.`userId` = Users.`id`  And Users.`deletedAt` IS NULL and `when` = "2023-01-03"
GROUP BY Users.`contactName`  
ORDER BY Users.`contactName` ASC

Ale ja potrzebuje znaleźć tych którzy nie wypełnili raportu.
kombinuje z EXISTS(SELECT `when` FROM `Reports` WHERE `when` = "2023-01-03" )
Ale bez rezultatu.

0

A coś w rodzaju:

SELECT * 
  FROM users u
 WHERE u.user_id NOT IN (
SELECT user_id
FROM Reports, Users
Where Reports.userId = Users.id And Users.deletedAt IS NULL and when = "2023-01-03"
GROUP BY Users.contactName
ORDER BY Users.contactName ASC
)

?

2
SELECT 
  Users.`contactName`, 
FROM 
  Users 
  left join Reports on  Reports.`userId` = Users.`id`  and Reports.`when` = "2023-01-03" 
Where 
 Users.`deletedAt` IS NULL 
 Reports.`userId` is null
ORDER BY 
  Users.`contactName` ASC

0
Panczo napisał(a):
SELECT 
  Users.`contactName`, 
FROM 
  Users 
  left join Reports on  Reports.`userId` = Users.`id`  and Reports.`when` = "2023-01-03" 
Where 
 Users.`deletedAt` IS NULL 
 Reports.`userId` is null
ORDER BY 
  Users.`contactName` ASC

Panczo dzięki za odpowiedź ale coś nie działa w tym zapytaniu (usunąłem przecinek przed FROM ale to jeszcze nie to)
poniżej screen z błędem.

screenshot-20230104110533.png

jak usunę Reports.userId IS NULL wtedy pojawia się lista wszystkich pracowników
Nie wiem czy dobrze opisałem problem. Ja szukam usera który nie wypełnił raportu za 2023-01-03 Czyli takiego rekordu nie ma wcale.

a struktura tabeli Reports wyglada tak

screenshot-20230104110829.png

2

brakuje and przed Reports.``userId`` is null

SELECT 
  Users.`contactName` 
FROM 
  Users 
  left join Reports on  Reports.`userId` = Users.`id`  and Reports.`when` = "2023-01-03" 
Where 
 Users.`deletedAt` IS NULL 
 and Reports.`userId` is null
ORDER BY 
  Users.`contactName` ASC
0

Dzięki wielkie Panowie.
Panczo --> zawsze pisze w jednym wierszu dlatego nie mogłem dojść do And-a
KamilAdam --> musiałem trochę pozmieniać i przenieść drugi warunek where do pierwszego bo na początku nie działało ale w końcu udało mi się.
Jeszcze raz dzięki

1 użytkowników online, w tym zalogowanych: 0, gości: 1