Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z UPDATE
Forum PHP.pl > Forum > PHP
damianprz
Co jest nie tak ze składnią tego zapytania

  1. UPDATE zapasy LEFT JOIN (SELECT id_towaru, avg( popyt ) AS srednia, STD( popyt ) AS odchylenie FROM produkty GROUP BY id_towaru)
  2. ON zapasy.id_towaru = produkty.id_towaru
  3. SET zapasy.srednia = produkty.srednia, zapasy.odchylenie = produkty.odchylenie


Select w nawiasie liczy dla każdego towaru średnią i odchylenie standardowe
Wyniki czyli produkty.srednia produkty.odchylenie chcę UPDATEM dodać do tabeli zapasy
Ale coś jest nie tak
thek
Napisałem Ci w osobnym temacie... Teraz to podzapytanie SELECT (w nawiasie) nie ma swojej nazwy więc baza nie wie co znaczy
  1. ON zapasy.id_towaru = produkty.id_towaru
gdyż nie zna tabeli dołączanej o nazwie produkty.Dopisz produtky ZA nawiasem jako alias tej tabeli a baza się połapie.
damianprz
  1. UPDATE zapasy LEFT JOIN
  2.  
  3. ( SELECT id_towaru, avg(popyt) AS srednia, STD(popyt) AS odchylenie FROM produkty GROUP BY id_towaru) produkty
  4.  
  5. ON zapasy.id_towaru=produkty.id_towaru
  6.  
  7. SET zapasy.srednia=produkty.srednia, zapasy.odchylenie=produkty.odchylenie


Dalej błąd zapytania
thek
Zrobiłem:
  1. UPDATE zapasy z LEFT JOIN (SELECT id_towaru, avg( popyt ) AS srednia, STD( popyt ) AS odchylenie FROM produkty GROUP BY id_towaru) p ON z.id_towaru = p.id_towaru SET z.srednia = p.srednia, z.odchylenie = p.odchylenie
i chodzi w bazie jak ta lala. Zobacz czy masz w bazie już rekordy o podanych id. Bo może sie okazać, że nie masz w tabeli "zapasy" rekordów o id_towaru równym takim jaki jest wymagany do UPDATE smile.gif W tej chwili masz towary o id = 1, 2, 3, 4, więc tabela zapasy, także takie musi mieć choćby nawet puste poza polem id_towaru, gdyż to do niego dołączamy wyniki. To tak jakbyś chciał pisać długopisem na kartce, której nie masz. Lub bardziej adekwatnie do przykładu... Jakbyś chciał powiesić ubranie na hakach, choć do ściany ich nie wbiłeś nigdy. Jak sam zauważyłeś zapewne to jest komenda UPDATE a nie INSERT. A by móc coś aktualizować, to to coś już musi istnieć smile.gif
damianprz
Nadal nie chodzi
Może coś z kluczami lub indeksami w tabelach, może źle ustawione

Miałem nie dublować ale tamten temat zapchany a tutaj może ktoś nowy zaglądnie
thek
Sprawdź dokładnie nazwy w tabelach i kolumnach. Pamiętaj, ze muszą się zgadzać co do literki. To samo z aliasami. Zwlaszcza, że jeśli używasz JOIN, to MySQL może sie burzyć o brak aliasu dla przykładu. Możliwości jest wiele i bez komunikatu błędu ciężko będzie dojść do przyczyny problemu.
damianprz
Nazwy sprawdzałem
Są następujące:

zapasy

id_towaru int(10) Nie 0
nazwa varchar(30) Nie
ZM int(10) Nie 0
ZZ int(10) Nie 0
ZR int(10) Nie 0
stan double Nie 0
srednia double Nie 0
odchylenie double Nie 0

produkty

id_daty int(10) Nie 0
id_towaru int(10) Nie 0
popyt double Nie 0

zapasy

id_towaru nazwa ZM ZZ ZR stan srednia odchylenie
1 drewno 600 350 100 0 50 10
2 srubki 6000 4000 110 0 175 25
3 klej 800 450 10 0 88 8
4 drewno 450 222 25 0 19 2

produkty

id_daty id_towaru popyt
1 1 10
1 2 20
1 3 20
1 4 10
2 1 15
2 2 25
2 3 15
2 4 20
3 1 5
3 2 15
3 3 25
3 4 5
4 1 10
4 2 5
4 3 15
4 4 35
5 1 5
5 2 15
5 3 25
5 4 15
6 1 10
6 2 10
6 3 10
6 4 10
7 1 15
7 2 15
7 3 25
7 4 25
8 1 15
8 2 15
8 3 25
8 4 25
9 1 10
9 2 15
9 3 20
9 4 18

thek
Wziąłem i dokładnie przepisałem oraz skopiowałem zarówno strukturę jak i zawartość rekordów. Wykonanie jest prawidłowe i bezbłędne. Widzę więc przyczynę tylko w jednej rzeczy. Używasz KRASNALA, jesli na domyślnie ściągnięcej paczce to problem jest zapewne właśnie w niej. Musisz bowiem wiedzieć, ze jest w niej naprawdę stara wersja wszystkiego. Star Apache (ten akurat nie zmienił się wiele), stary PHP i NAPRAWDĘ stary MySQL w wersji 3.X, więc to on zapewne sprawia Ci problem, bo mi ta wersja kiedyś także problemów narobiła. Od tamtego czasu albo sam konfiguruję wszystko albo używam pakietu WAMP na windzie. Zrób sobie Eksport bazy danych i wywal Krasnala oraz zainstaluj WAMPa. Powinno przejść jak ręka odjął smile.gif
damianprz
Pomogło
zainstalowałem Vertrigo!

przedtem miałem
SKŁAD SERWERA:

Apache 1.3.31
PHP 4.3.9
PHP 5.0.2
MySQL 3.23.58
ActivePerl 5.6.1.628
phpMyAdmin 2.6.0 pl2
SQLiteManager 1.0.1
CesarFTP 0.99g
WebAlizer 2.1
Free SMTP Server

a teraz:

Komponenety:

Apache 2.0.63
PHP 5.2.6
Mysql 5.0.51b
Smarty 2.6.19
SQLite 3.5.9
PhpMyAdmin 2.11.7
SQLiteManager 1.2.0
ZendOptimizer 3.3.3
thek
Noto myślę, że w tej kombinacji największym winowajca jest wspomniany przeze mnie MySQL w starej wersji 3.X. Z WAMPem nie powinieneś mieć problemu bo jest jeszcze prostszy w obsłudze niż Krasnal smile.gif Poza tym problemy są tylko wtedy gdy masz niezwykle rozbudowany serwis, a Twój na taki nie wygląda. Poza tym moduły i cala konfiguracja w WAMPie jest dziecinnie prosta.

EDIT: Nie instaluj nigdy tego czego nie potrzeba, bo zaśmiecasz sobie system. W Twoim konfigu na pewno nie był potrzebny ActivePerl, CesarFPT, WebAlizer i FreeSMTP server. Tobie do szczęścia potrzebny tylko:
Apache (serwer), PHP (język skryptowy), MySQL (baza danych) i phpMyAdmin (obsługa bazy z poziomu przeglądarki) lub SQLiteManager (alternatywny sposób obsługi bazy danych).
damianprz
Działa działa działa!!!



guitar.gif yahoo.gif thumbsupsmileyanim.gif

Dodałem jeszcze round(x,2) do STD i AVG

  1. UPDATE zapasy z LEFT JOIN (SELECT id_towaru, round(avg( popyt ),2) AS srednia, round(STD( popyt ),2) AS odchylenie FROM produkty GROUP BY id_towaru) p
  2. ON z.id_towaru = p.id_towaru
  3. SET z.srednia = p.srednia, z.odchylenie = p.odchylenie


i tabela zapasy wygląda tak:

  1. id_towaru nazwa ZM ZZ ZR stan srednia odchylenie
  2. 1 ..............drewno ....600... 350 ...100 ...0..... 10.56..... 3.69
  3. 2 ..............srubki 6000 ....4000.... 110.... 0 .....15.......... 5.27
  4. 3................. klej 800 .......450 ......10 .....0 .....20 .........5.27
  5. 4 ................drewno 450 ....222 .....25..... 0 ....18.11 ......8.8

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.