Czy idzie za pomocą jednego zapytania zrobić coś takiego.

0

Jak w temacie czy idzie za pomocą zrobić coś takiego, a mianowicie mam dwie tabele w jednej są poszczególne działania jakie można zrobić danego dnia, a w drugiej są wszystkie działania podejmowane w każdy dzień, a w każdy dzień może być ich nawet 10.

1 tabela nazywa się np. tak
nazwy_dzialan

id_dzialania nazwa_dzialania
1 do 100 np. jakaś nazwa

druga tabela to

pole 1 dzialania
data
to jest pole składające się tylko się z formatu daty (RR-MM-DD)
pole 2 data2
to jest pole które ma pełną datę
no i pole 3 id_dzialania

I chodzi mi o to jak za pomocą jednego zapytania zrobić coś takiego, żeby wybrać np. dzień w którym podjęto działanie x, a nie podjęto działania y

0

Chodzi Ci o zapytanie, które zwróci jako wynik dzień w, którym jedno działanie się nie wykonało mimo że powinno?

0

Pomijajac wady konstrukcyjne tabel podaje slowa kluczowe

Left outer join
Right outer join
full outer join
IS NULL
IS NOT NULL
0

To tak na szybko. Pewnie da się lepiej

SELECT data from dzialania t1 WHERE EXISTS (SELECT 1 FROM dzialania t2 WHERE t1.data = t2.data AND t2.id_dzialania=x) AND NOT EXISTS (SELECT 1 FROM dzialania t2 WHERE t1.data = t2.data AND t2.id_dzialania=y)

EDIT:
Drugi sposób

SELECT data FROM dzialania t1 
LEFT JOIN dzialania t2 ON t1.data = t2.data AND dzialanie_id=x
LEFT JOIN dzialania t3 ON t1.data = t3.data AND dzialanie_id=y
WHERE t2.id IS NOT NULL AND t3.id IS NULL

Nie testowałem. Nawet jeżeli popełniłem gdzieś błąd, to powinno Cię nakierować jak to zrobić. Nie przeklejaj bezkrytycznie przypadkiem :P

0

To może inaczej wam to wytłumaczę mam bazę gdzie są 2 tabele spozycie i substancje i chcę wybrać np. za pomocą jednego zapytania kiedy był brany lek np. paracetamol tego dnia i równocześnie nie był brany tego dnia lek np. ibuprofen.

tabela spozycie wygląda tak
id data data2 id_substancji
data w pełnym formacie data która zawiera tylko rok miesiąc i dzień id tych substancji z tabeli substancje

tabela substancje

id
ma się tak samo jak id_susbstancji do tabeli spozycie czyli jak np. jest lek klemastyna, która ma wartość 20 to w id_substancji też będzie miała wartość 20
i jest pole nazwa
To jest nazwa substancji czyli leku

0

Pomijając fakt, że nie rozumiem po co Ci dwie kolumny na datę (rozumiem, że tą samą datę tylko w innym formacie) możesz to zrealizować w ten sposób.

SELECT data FROM spozycie sp JOIN substancje su ON sp.id_substancji=su.id WHERE su.nazwa='paracetamol' AND su.nazwa<>'ibuprofen'
0

Da się :) Tylko zbyt prosto chciałem to zrobić i nie przetostowałem. To już zadziała:

SELECT data
FROM spozycie sp join substancje su ON sp.id_substancji=su.id
GROUP BY data
HAVING SUM(case when su.nazwa = 'paracetamol' then 0 when su.nazwa = 'ibuprofen' then 1 end)=0
0

Moja baza składa się z 3 tabel ale tylko 2 tabele są potrzebne do wykonania tego zapytania, tak naprawdę trochę pomyliłem bo pole data2 to tylko dzień miesiąc i rok a pole data to cały czas, ale ja to wziąłem pod uwagę wykonując zapytanie. Może to, że zamiast id_substancji podałem id_działania może to mieć z tym styczność.

0

Nie potrafię Ci bardziej pomóc, nie rozumiem co błędnego zwraca ci powyższe. Zapytanie, które zamieściłem w moim poście działa tak, że:
wypisuje daty, gdzie przy tej dacie istnieje paracetamol i nie istnieje ibuprofen.
Jeśli to nie jest to czego oczekujesz to może ktoś inny to chwyci.

Odnośnie dat, jeśli w kolumnie 'data' przechowujesz

DATETIME

to należy pole 'data' skonwertować do date

 albo podać to twoje 'date2'. Może wykonując zapytanie wziąłeś to pod uwagę tylko w jednym miejscu? 

Jakie id_działania? Przecież tego nawet nie ma w tych tabelach.
1

Nie potrafię tego zrozumieć - od pięciu dni toczą się boje aby autor wreszcie powiedział o co mu chodzi. A wystarczy dać w pierwszym poście DDL tabel, przykładowe dane wejściowe i jaki ma być wynik. Tylko do tego trzeba by się trochę przyłożyć, w zamian mamy natomiast radosną "tfurczość" w postaci I chodzi mi o to jak za pomocą jednego zapytania zrobić coś takiego, żeby...
Normalnie szkoda słów

0

Przepraszam, ale czy to nie wystarczyło

To może inaczej wam to wytłumaczę mam bazę gdzie są 2 tabele spozycie i substancje i chcę wybrać np. za pomocą jednego zapytania kiedy był brany lek np. paracetamol tego dnia i równocześnie nie był brany tego dnia lek np. ibuprofen.

tabela spozycie wygląda tak
id data data2 id_substancji
data w pełnym formacie data która zawiera tylko rok miesiąc i dzień id tych substancji z tabeli substancje

tabela substancje

id
ma się tak samo jak id_susbstancji do tabeli spozycie czyli jak np. jest lek klemastyna, która ma wartość 20 to w id_substancji też będzie miała wartość 20
i jest pole nazwa
To jest nazwa substancji czyli leku

2

słuchaj @pol90 z tego jak próbujesz opisać problem wynika, że nie bardzo wiesz o czym piszesz. Nie wiesz jakie informacje są ważne, próbujesz opisać problem jakbyś elaborat o wpływie krowich gazów na globalne ocieplenie pisał. Posłuchaj może tych, którzy próbują Ci pomóc i daj sobie pomóc. Zapamiętaj też na przyszłość, że jak się pyta o coś to trzeba przede wszystkim konkrety przedstawić. Jeszcze raz DDL tabel (co to jest DDL to google wie), przykładowe dane jakie są w tabelach (forum ma funkcję bajeranckich :p tabelek więc możesz to ogarnąć aby było czytelne, chociaż wypisanie kilku wierszy jeden pod drugim też może być, ba nawet mogą być najzwyklejsze inserty, które Ci phpMyAdmin wygeneruje) i NAJWAŻNIEJSZE co chcesz uzyskać na wyjściu, czyli tu akurat co ma zapytanie SQL zwrócić. Ale NIE W FORMIE RADOSNEGO SŁOWOTOKU a w formie konkretu czyli wyniku zapytania odpowiadającego danym przykładowym. Np. tak

Mam dwie tabelki:
uses
user_id
first_name
last_name

activities
activiti_id
user_id
date

z danymi
users

user_id first_name last_name
1 edek aaa
2 zdzich bbb

activities

activity_id user_id date
1 1 1923-13-1
2 1 1923-13-2
3 2 1923-11-4
4 1 1923-13-3

i chcę dostać wynik w postaci

activity_id date first_name last_name
1 1923-13-1 edek aaa
2 1923-13-2 edek aaa
3 1923-11-4 zdzich bbb
4 1923-13-3 edek aaa

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