Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wszystko źle :)
Forum PHP.pl > Forum > Bazy danych > MySQL
mihmih
już jakiś czasu tworzę sobie małą bazę danych, a że na początku nie wiedziałem prawie nic o tym to projektowanie tabel pozostawiało wiele do życzenia smile.gif

w każdym razie mam tabelę produktów i operacje do nich przywiązane. I zamiast zrobić osobną tabelę z operacjami i tabele łączoną między nimi to w tabeli produkty mam kilkanaście pól boolean, gdzie zaznaczam czy dana operacja występuje, Chciałbym to naprawić, ale nie wiem czy jest jakieś magiczne polecenie (UPDATE....SELECT) które pomoże przenieść dane o operacjach z tabeli produkty do nowej tabeli, gdzie będę wpisywał ID produktu i ID operacji... Może ktoś mnie chociaż nakieruje na rozwiązanie?
trueblue
Raczej coś w stylu:
  1. INSERT INTO produkt_operacja
  2. SELECT id_produkt,recznie_nadane_id_operacji_1 FROM produkt WHERE pole_operacji_1=1
  3. UNION
  4. SELECT id_produkt,recznie_nadane_id_operacji_2 FROM produkt WHERE pole_operacji_2=1
  5. UNION
  6. ....


Jeśli jest dużo różnych operacji, to bez procedury lub skryptu w PHP może się nie obejść.
mihmih
dzięki, na razie wszystko sobie rozrysowywuje żeby czegoś nie zepsuć.

Ogólnie zależy mi na tym żeby zebrać wszystkie operacje wszystkich zamówionych produktów (wszystkie ID_produkt_operacja) i zrobić im GROUP BY ID_operacji, żeby zrobić osobną listę na każdą operację, gdzie będą tylko te produkty gdzie występuje dana operacja. W tabeli produkt_operacja będzie dodatkowo kolumna "kolejność", gdzie będę wpisywał liczby, tak aby ORDER BY ta kolumna dało kolejność wykonywania operacji w każdym produkcie. I wpadłem na pomysł, żeby przy moim zapytaniu, gdzie będzie ID_produkt_operacja, nazwa operacji, nazwa produktu itd dołożyć kolumny:poprzednia operacja i następna operacja....

jedyne co mi przychodzi do głowy to nadać numerację wg ID_produktu i "kolejność" i potem odwoływać się do tych operacji jako nadany numer - 1 i nadany numer + 1....ale może jest prostszy sposób?
trueblue
Pierwszej kwestii nie do końca rozumiem. Czemu chcesz zrobić GROUP BY? Przecież wyciągając te dane będziesz miał właśnie tylko te produkty, dla których wykonano operacje. GROUP BY mogłoby ewentualnie wyeliminować tą samą operację na tym samym produkcie.

Co do kwestii kolejności. Wydaje mi się, że tu wystarczy zwykły klucz sortowania, czyli czym nowsza operacja, tym większy klucz. Nie ma znaczenia czy będzie większy o 1,2 czy 10, ważne, że większy. Następną operację względem danej wyciągniesz poprzez zapytanie: WHERE klucz_sortowania>klucz_aktualnej_operacji ORDER BY klucz_sortowania LIMIT 0,1. W przypadku poprzedniej, odwrotny warunek i odwrotne ORDER BY.
mihmih
co do pierwszej kwestii to źle się wyraziłem - chcę te wszystkie elementy pogrupować podczas drukowania. To znaczy zapytanie jest bez GROUP BY, ale drukują się osobne karty produkcji dla każdej operacji. W raportach Libreoffice GROUP BY można zrobić właśnie na poziomie wydruku. A że tabelą główną w zapytaniu będzie produkt_operacja to jeśli jakiś produkt ma 3 operacje to pojawi się na 3 kartach produkcji. A jeśli żaden z produktów danego zamówienia nie ma operacji nr 5 to wtedy karta produkcji dla operacji 5 się nie wydrukuje.

Nie rozumiem co znaczy wyrażenie LIMIT 0,1. Do tej pory LIMIT znałem jako ograniczenie ilości rekordów w zapytaniu i występowało zawsze z jedną liczbą.
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.