Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> czy da sie to zrobic w mysql czy musi byc w php
shakal69
post
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 6.01.2009

Ostrzeżenie: (0%)
-----


Jest tablica :
id_historia_statusow | id_zamowienia | id_statusu_zamowienia


Chodzi o to aby nie trzeba było dla każdego zamówienia z osobna sprawdzać warunku.

np.:
SELECT *FROM `historia_statusow_zamowienia` WHERE id_statusu_zamowienia IN (1,2) AND id_statusu_zamowienia NOT IN (7,9) AND
`id_zamowienia`=10

Chodzi o to aby czymś zastąpić `id_zamowienia`= kolejne id_zamowienia

Próbowałem zrobić to przez GROUP BY ale to to nie to.

Czy jest jakiś sposób w MySql aby wykonać takie zapytanie czy trzeba w php po koleji sprawdzać każdy rekord?
Go to the top of the page
+Quote Post
sowiq
post
Post #2





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(shakal69 @ 6.01.2009, 22:07:30 ) *
SELECT *FROM `historia_statusow_zamowienia` WHERE id_statusu_zamowienia IN (1,2) AND id_statusu_zamowienia NOT IN (7,9) AND `id_zamowienia`=10

Skoro IN(1,2), to na pewno NOT IN(7,9) i na pewno nie `id_zamowienia`= 10. Logika się kłania. Albo manual/pierwszy lepszy tutorial.
Go to the top of the page
+Quote Post
pyro
post
Post #3





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


Cytat(sowiq @ 6.01.2009, 22:33:09 ) *
Skoro IN(1,2), to na pewno NOT IN(7,9)



co do tego się całkowicie zgadzam

Cytat(sowiq @ 6.01.2009, 22:33:09 ) *
 i na pewno nie `id_zamowienia`= 10. Logika się kłania. Albo manual/pierwszy lepszy tutorial.



id_zamowienia to inna kolumna, no chyba ze id jest unique no to wtedy tak hehe
Go to the top of the page
+Quote Post
sowiq
post
Post #4





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(pyro @ 6.01.2009, 22:40:54 ) *
id_zamowienia to inna kolumna, no chyba ze id jest unique no to wtedy tak hehe
Masz całkowitą rację (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Zagalopowałem się troszkę i nie zauważyłem, że to różne nazwy są (IMG:http://forum.php.pl/style_emoticons/default/wstydnis.gif)
Go to the top of the page
+Quote Post
shakal69
post
Post #5





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 6.01.2009

Ostrzeżenie: (0%)
-----


unikalną wartością jest tylko id_historia_statusow


Podam wartości w tabeli to wam trochę rozjaśni

Kod
[url="http://localhost/phpmyadmin/sql.php?db=msi&table=historia_statusow_zamowienia&token=8a04a6bbbd4a9f26fd8ecfcade2f6c70&pos=0&session_max_rows=30&disp_direction=horizontal&repeat_cells=100&dontlimitchars=0&sql_query=SELECT+%2AFROM+%60historia_statusow_zamowienia%60++ORDER+BY+%60historia_statusow_zamowienia%60.%60id_historia_statusow%60+ASC"]id_historia_statusow[/url] | id_zamowienia | id_statusu_zamowienia
1                           | 10                | 1
2                           | 10                | 2
3                           | 10                | 3
4                           | 10                | 8
5                           | 15                | 1
6                           | 15                | 2
7                           | 15                | 7
8                           | 15                | 9


Chodzi o to aby zwróciło mi tylko wiersz a dokładnie id_zamowienia jesli id status_zamowienia wynosi 1,2 ale nie ma statusow 7,9
Ma sie to odnosic do id_zamowienia.

Sprawdzamy wszystkie rekordy dla kolejnych numerow zamowienia.

Jesli dla id_zamowienia=10 id_statusu_zamowienia zawiera 1,2 ale nie zawiera 7,9 to zwraca wiersz z id_zamowienia
Tak dla przykładu dla id_zamowienia= dzieszienc powino zwrócić wiersz.

Natomiast dla id_zamowienia=15 juz nie







Podaję jeszcze raz tabele bo powżej jest nieczytelna

id_historiia_statusow |id_zamowienia | id_statusu_zamowienia
1 | 10 | 1
2 | 10 | 2
3 | 10 | 3
4 | 10 | 8
5 | 15 | 1
6 | 15 | 2
7 | 15 | 7
8 | 15 | 9
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Co do 7,9 - to musza byc zamowienia ktore nie mialy dowolengo stanu z 7 i 9 czy takie ktore nie mialy obu na raz?

  1. SELECT
  2. zamowienia.id_zamowienia,
  3. (SELECT COUNT( * ) FROM zamowienia z2 WHERE z2.id_zamowienia = zamowienia.id_zamowienia AND z2.id_statusu_zamowienia IN (1,2)) AS wanted_count,
  4. (SELECT COUNT( * ) FROM zamowienia z3 WHERE z3.id_zamowienia = zamowienia.id_zamowienia AND z3.id_statusu_zamowienia IN (7,9)) AS unwanted_count
  5. FROM zamowienia GROUP BY zamowienia.id_zamowienia
  6. HAVING wanted_count = 2 -- tyle ile (1,2) ma elementow AND unwanted_count = 2 -- ukryje te rekordy ktore mialy oba stany (7 i 9)


Ten post edytował dr_bonzo 7.01.2009, 13:50:55
Go to the top of the page
+Quote Post
shakal69
post
Post #7





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 6.01.2009

Ostrzeżenie: (0%)
-----


Jeśli wystąpi stan 7 lub 9 to już nie zwraca rekordu
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #8





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Hmmm, aaaa - co innego w SQL a co innego w komentarzach (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) (moj blad)
  1. HAVING wanted_count = 2 -- tyle ile (1,2) ma elementow AND unwanted_count < 2

==>
  1. HAVING wanted_count = 2 -- tyle ile (1,2) ma elementow AND unwanted_count = 2



poprawilem poprzedni post
Go to the top of the page
+Quote Post
shakal69
post
Post #9





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 6.01.2009

Ostrzeżenie: (0%)
-----


Właśnie to mi chodziło. Dzięki

Z tym ze dla mnie to unwanted_count = 0

Nigdy nie używałem klauzury HAVING

Przeanalizowałem kod i rozjaśniło mi kilka kwestii
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 11.10.2025 - 02:54