Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: czy da sie to zrobic w mysql czy musi byc w php
Forum PHP.pl > Forum > Bazy danych > MySQL
shakal69
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?
sowiq
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.
pyro
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
sowiq
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ę smile.gif Zagalopowałem się troszkę i nie zauważyłem, że to różne nazwy są wstydnis.gif
shakal69
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
dr_bonzo
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)
shakal69
Jeśli wystąpi stan 7 lub 9 to już nie zwraca rekordu
dr_bonzo
Hmmm, aaaa - co innego w SQL a co innego w komentarzach 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
shakal69
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
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.