Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]pętla wyciągająca zamienniki z bazy
jaco1410
post 24.02.2014, 23:04:29
Post #1





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 30.12.2010

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


Hej,

mam tabele "czesci" w bazie, która ma wartości mniej więcej takie (oczywiście tabela zawiera więcej nazw ze sobą nijak nie powiązanych):

  1. nazwa_czesci nr_materialowy zamiennik
  2. zarowka12Va 1111 2222
  3. zarowka12Vb 2222 3333
  4. zarowka12Vc 3333 1111
  5. kierownica 4444 5555


i teraz po otrzymaniu nazwy wybieram konkretny nr materiałowy ale chce wyświetlić oprócz tego wszystkie nr zamienników bez powtórzeń, czyli wynik powinien wyglądać tak:

nr materiału:
1111
zamienniki:
2222
3333

  1. // Podlaczenie do bazy
  2.  
  3. //zakladajac ze postem otrzymuje konkretną wartosc - "zarowka12Va"
  4.  
  5. $sql02 = "SELECT nazwa_czesci,nr_materialowy,zamiennik FROM czesci WHERE nr_materialowy='$_POST["nazwa"]';";
  6. $result02 = mysql_query($sql02) or die(mysql_error());
  7. $row02 = mysql_fetch_array($result02);
  8.  
  9. $nr = $row02[nr_materialowy]; //pobieram nr czesci
  10.  
  11. // Pobieram zamiennik
  12. $a = $row02[zamiennik]; // zmienna ta przyjmuje 1 wartość 2222
  13.  
  14. echo ''.$nr.'<br>'; // wyświetlam główny materiał
  15.  
  16. // i teraz chcę wyświetlić wszystkie nr materiałowe zamienników bez powtórzeń
  17.  
  18. $main1 = $row02[nr_materialowy];
  19. $b = 1;
  20. while ($a !=0) {
  21. if ($main.$b = $a) {
  22. echo "już taki wyświetliłem<br>";
  23. break;
  24. }
  25. else {
  26. $sql03 = "SELECT nr_materialowy,zamiennik FROM czesci WHERE nr_materialowy='$a'";
  27. $result03 = mysql_query($sql03) or die(mysql_error());
  28. $row03 = mysql_fetch_array($result03);
  29.  
  30. echo 'zamiennik:'.$a.'<br>';
  31.  
  32. $a = $row03[zamiennik];
  33. $main.$b = $row03[zamiennik];
  34. }
  35. $b++;
  36. }

jezeli wyrzuce zmienne $main i $b i zostawie to co jest w else, zapętla mi się pętla a chcę aby się skończyła jeżeli już taki materiał wyświetliłem

powyższe wyświetla mi tylko 1 zamiennik i niestety nie mogę znaleźć gdzie robię błąd?

poproszę o sugestię
dzięki
pozdrawiam

Ten post edytował jaco1410 25.02.2014, 22:56:19
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 17)
jarek0203
post 24.02.2014, 23:35:05
Post #2





Grupa: Zarejestrowani
Postów: 37
Pomógł: 2
Dołączył: 1.01.2013

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


Poczytaj o GROUP BY
Go to the top of the page
+Quote Post
com
post 24.02.2014, 23:49:44
Post #3





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


  1. if ($main.$b = $a) {

coś takiego nie zrobi Ci z tego $main1
Przykład:
http://ideone.com/ZxqOJP

poza tym w warunku to chyba == a nie = a $row02[zamiennik] powinno być $row02['zamiennik'] wink.gif

i inne analogicznie wink.gif

Ten post edytował com 24.02.2014, 23:48:24
Go to the top of the page
+Quote Post
jaco1410
post 25.02.2014, 21:02:40
Post #4





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 30.12.2010

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


Hej,
podstawiłem tak jak pisałeś w zmiennych:

  1. $a == $row03['zamiennik'];


oraz zastosowałem var_dump:
  1. var_dump($main.$b)


niestety nic to nie dało, dalej mam tak samo, wyświetla tylko 1 zamiennik, myślę że coś z pętlą jest nie tak!, tylko nie mogę dojść co smile.gif

co do GROUP BY, nie mam pojęcia którą z jego funkcji i jak mógłbym wykorzystać, może ktoś podrzuci jakiś przykład?

dzięki
pozdrawiam.

Ten post edytował jaco1410 25.02.2014, 21:04:23
Go to the top of the page
+Quote Post
jarek0203
post 25.02.2014, 21:10:21
Post #5





Grupa: Zarejestrowani
Postów: 37
Pomógł: 2
Dołączył: 1.01.2013

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


Podaj przykład co i jak się ma wyświetlać bo z 1 posta nic nie rozumiem ;/. Np. pokaż co masz w tabeli i co z niej chcesz wyświetlić.
Go to the top of the page
+Quote Post
jaco1410
post 25.02.2014, 21:15:20
Post #6





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 30.12.2010

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


Hej,

faktycznie nie zrozumiale napisałem jak ma wyglądać wynik, zedytowałem pierwszy post.

dzieki za uwagę
Go to the top of the page
+Quote Post
jarek0203
post 25.02.2014, 21:44:18
Post #7





Grupa: Zarejestrowani
Postów: 37
Pomógł: 2
Dołączył: 1.01.2013

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


Możesz to zrobić tak: pewnie da się zrobić w 1 zapytaniu ale nie wiem jak:

wyświetlasz info o nr_materialowym
  1. SELECT nazwa_czesci,nr_materialowy FROM czesci WHERE nr_materialowy='$_POST["nazwa"]'


a później wyświetlasz wszystkie zamienniki różne od '$_POST["nazwa"]':
  1. SELECT zamiennik FROM czesci WHERE zamiennik<>'$_POST["nazwa"]'

Go to the top of the page
+Quote Post
jaco1410
post 25.02.2014, 21:53:02
Post #8





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 30.12.2010

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


Hej,

niestety to by tylko działało jezeli w tabeli miałbym tylko te 3 materiały, a jest ich niestety więcej i z różnymi nazwami i oczywiśnie nie są wszystkie ze sobą połączone zamiennikami:), więc tak nie da rady.

może jeszcze ktoś pochyli się nad prośbą

dzięki
Go to the top of the page
+Quote Post
jarek0203
post 25.02.2014, 22:12:30
Post #9





Grupa: Zarejestrowani
Postów: 37
Pomógł: 2
Dołączył: 1.01.2013

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


To dalej nie rozumiem... rozumiem że podajesz $_POST["nazwa"] czyli nr_materialu

i teraz chcesz wyświetlić wszystkie zamienniki oprócz nazwy $_POST["nazwa"] i do tego zamienniki nie mogą się powtarzać?
Go to the top of the page
+Quote Post
jaco1410
post 25.02.2014, 22:17:25
Post #10





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 30.12.2010

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


tak,

wynik musi być taki:

nr materiału:
1111
zamienniki:
2222
3333

przy Twoim zapytaniu otrzymam wszystkie kilkaset pozycji oprocz $_POST["nazwa"], co mnie nie interesuje

pozdrawiam
Go to the top of the page
+Quote Post
jarek0203
post 25.02.2014, 22:21:12
Post #11





Grupa: Zarejestrowani
Postów: 37
Pomógł: 2
Dołączył: 1.01.2013

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


SELECT zamiennik FROM czesci WHERE zamiennik<>'$_POST["nazwa"]' GROUP BY zamiennik

to jest bez powtorzeń
Go to the top of the page
+Quote Post
jaco1410
post 25.02.2014, 22:54:32
Post #12





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 30.12.2010

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


Hej,

no nie działa tak, tak jak pisalem to moze by i zadzialalo jakbym mial tylko 3 pozycje.

ujmę to tak:
pomyśl że w tabeli mam jeszcze pozycje:

  1. kierownica 4444 5555


i ma jej nie być przy wyświetlaniu, przy Twoim zapytaniu ta pozycja także będzie widnieć, więc tak to nie będzie działać.

ma ktoś jakiś pomysł?

pozdrawiam
Go to the top of the page
+Quote Post
jarek0203
post 25.02.2014, 23:07:54
Post #13





Grupa: Zarejestrowani
Postów: 37
Pomógł: 2
Dołączył: 1.01.2013

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


Aha teraz rozumiem o co chodzi. Myślałem że są same 'żarówki'. Na twoim miejscu albo podzielił bym to na dwie tabele albo dodał kolumnę typ.
Ale jak chcesz się bawić w pętle to pokaż ten poprawiony kod.
Go to the top of the page
+Quote Post
jaco1410
post 26.02.2014, 22:40:37
Post #14





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 30.12.2010

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


nie każda żarówka pasuje do drugiej:), to jest tylko wymyślony przykład,
poprawiony kod nie działa więc nie ma co go publikować.



edit: 26.02.2014

wkońcu udało mi sie stworzyć odpowiednią działającą pętlę z wykorzystaniem tablic smile.gif, niestety nie jest zbyt wydajna przy dużej ilości danych ale może się komuś przyda
może jest ktoś kto jest w stanie ją zoptymalizować do paru "k" danych?

  1. //wyświetlam nr materiałowy
  2.  
  3. $sql02 = "SELECT nr_materialowy,zamiennik FROM czesci WHERE nr_materialowy='$_POST["nazwa"]';";
  4. $result02 = mysql_query($sql02) or die(mysql_error());
  5. $row02 = mysql_fetch_array($result02);
  6.  
  7. $a = $row02[zamiennik]; // zmienna ta przyjmuje 1 wartość 2222
  8. $main = $row02[nr_materialowy];
  9.  
  10. $tablica = Array(); //tworzymy tablice
  11. $tablica[] = $main; //zapisujemy glowna wartosc do tablicy
  12.  
  13. while ($a !=0) {
  14. if (in_array($a, $tablica)) {
  15. //echo "Jest juz taki zamiennik, wyświetlam wszystkie zamienniki!";
  16. $ile = count($tablica); //zmienna okreslajaca ilosc elementow w tablicy
  17. $r=1;
  18. while ($r <= $ile-1) {
  19. echo '
  20. <TABLE><tr><td>zamiennik2:'.$tablica[$r].'</td></tr></TABLE>
  21. ';
  22. $r++;
  23. }
  24. break;
  25. }
  26. else {
  27. //echo "Nie ma takiego zamiennika...";
  28. $tablica[] = $a; //zapisujemy zamiennik do tablicy
  29. //sprawdzam czy jest nastepny zamiennik
  30. $sql03 = "SELECT nr_materialowy,zamiennik FROM czesci WHERE nr_materialowy='$a'";
  31. $result03 = mysql_query($sql03) or die(mysql_error());
  32. $row03 = mysql_fetch_array($result03);
  33. $a = $row03[zamiennik]; //ustawiam nową wartos dla zmiennej zamienników
  34. //echo ''.$a.'<br>';
  35. }
  36. }
  37.  


Ten post edytował jaco1410 26.02.2014, 22:41:54
Go to the top of the page
+Quote Post
com
post 26.02.2014, 22:52:52
Post #15





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


To co ja dałem Ci to przecież był przykład ze tak masz nie robić bo nie działa tak, wyraźnie napisałem, że z tego nie uzyskasz tego co chciałeś, bo konkatenacja stringa dodaje do niego a nie dopisuje nr do nazwy zmiennej..

A co do kwestii kolejnych to masz źle zbudowana bazę danych, w jednaj tabeli trzymasz wszystkie klucze, a w drugiej do danego klucza przypisujesz zamiennik, wtedy w zapytaniu wyciągasz co jest potrzebne i o nic się nie musisz martwić bo nic Ci się wtedy nie powtarza..

Ten post edytował com 26.02.2014, 22:53:17
Go to the top of the page
+Quote Post
jaco1410
post 26.02.2014, 23:00:13
Post #16





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 30.12.2010

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


Hej,

dlatego wymyśliłem zupełnie inną pętlę smile.gif

baza jest tak rozbudowana, że nie ma szans operować na kluczach o których piszesz, jak bym miał kilkaset pozycji to może tak ale nie przy zróżnicowaniu żędu kilku kilo w różne strony wink.gif

pozdrawiam.
Go to the top of the page
+Quote Post
com
post 26.02.2014, 23:24:49
Post #17





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


Cytat
jak bym miał kilkaset pozycji to może tak ale nie przy zróżnicowaniu żędu kilku kilo w różne strony


Jak rozumiem mówimy o relacyjnych bazach danych, wiec sam chyba nie wiesz o czym mówisz.. Głowna idea tych baz jest właśnie tworzenie relacji a nie jak w bazach nosqlowych, poczytaj sobie trochę o tym a wtedy wszystkie twoje problemy i wątpliwości zostaną rozwiane, bo tym bardziej dla kilku kilo danych brak normalizacji to masochizm wink.gif

Ten post edytował com 26.02.2014, 23:25:23
Go to the top of the page
+Quote Post
jaco1410
post 26.02.2014, 23:52:10
Post #18





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 30.12.2010

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


masz rację, wprowadzę to w życie, a właściwie wykorzystam już istniejące elementy, wcześnie nie pomyślałem o tym ....
i mniej wyciągne danych tym szybciej mi powinno to działać.

co do relacyjnych bazach danych to wciąż się uczę smile.gif

dzięki

pozdrawiam
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 00:41