[ #mysql #sql ]

mirki, z sql zazwyczaj nie mam problemu, ale chyba utkąłem.

w tabeli są dwie kolumny: godzina [time] i liczba [int]. pytanie: jak pogrupować dane po godzinie do dwóch stref czasowych 00:00:00 - 11:00:00 i 12:00:00 - 23:00:00 żeby zliczyć sumę liczb w obu tych zakresach godzin? przyświeca mi idea z podzapytaniem w leftjoin do samej sobie, ale skomplikowanie rozwiązania znacznie przewyższa wartość "projektu" ;)
  • 13
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@tomix: Przy takim przyroście to bez różnicy - każde rozwiązanie będzie dobre - i union i case. Ewentualnie możesz zrobić triggera on insert, który będzie ustawiał z automatu strefę czasową - odpytanie takiego widoku będzie szybsze (o ułamki sekund - mając na uwadze liczbę danych) i przeniesiesz kod na tabele. Ale to bardziej sztuka dla sztuki.

BTW - zamiast rozpisywać drugiego whena w case, możesz zrobić else.
  • Odpowiedz
W projekcie przechowuję dużo małych obrazków (powiedzmy że ikon) tworzonych przez użytkowników. Jest ich nawet po kilkadziesiąt na usera, wymiary ok 100x60px, format png, zajmują po kilka-kilkanaście KB.

Na początku trzymałem je w plikach, ale żeby zmniejszyć liczbę requestów zapisuję je jako base64. Obecnie trzymam to wszystko w bazie (tzn zakodowane base64, nie pliki :)), ale obawiam się, że wraz ze wzrostem liczby uzytkowników baza może tego nie przeżyć, tym bardziej, że
  • 15
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

SELECT YEAR(data) AS RokSprzedazy, COUNT(fakturaID) AS IloscDokumentow FROM faktury GROUP BY RokSprzedazy HAVING RokSprzedazy BETWEEN 2006 AND 2008


@singollo: W Mysql tak - dlatego tez....

Note that MySQL, unfortunately, doesn't adhere to this standard, causing nothing but confusion. Don't fall for MySQL's tricks. GROUP BY transforms table references. You can thus only reference columns also referenced in the GROUP BY
  • Odpowiedz
You can thus only reference columns also referenced in the GROUP BY clause.


@msq: To nie jest do końca prawdziwe, nie trzeba pakować wszystkich kolumn które wybierasz do GROUP BY, SELECT a1, a2, max(b1) from a JOIN b ON (....) GROUP BY a1 może być całkowicie poprawne nawet poza MySQL
  • Odpowiedz
zakładanie nowego klucza na tabeli ~700k rekordów - #mysql myśli już 2 godziny.

A gdybym tylko wcześniej sprawdził wersję serwera...
  • 7
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Wykończy mnie ten mysql. Próbuję zrobić jakikolwiek (już teraz) trigger, przepisuję przykłady z książek, przeklejam z internetu i cały czas bad syntax. Powie mi ktoś co tutaj jest źle?

CREATE TRIGGER rabat

BEFORE INSERT ON zamowienia

FOR
  • 10
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Onoki: hint: new. old.

@ to zmienna, do wartosci kolumn odwolujesz sie uzywajac new.nazwakolumny lub old.nazwakolumny

new. jest dostepne przy insertach i updaejtach (nowa wartosc
  • Odpowiedz
Treść przeznaczona dla osób powyżej 18 roku życia...
  • 15
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Marmite: + wiele innych rzeczy. Przykładowo niech ktoś mi powie jak wygodnie zrobić

git bisect
w jakimś GUI? W IDE różnie wygląda sprawa z watcherami do testów. Bardzo często siedzę dużo w konsoli Railsowej. Pry Driven Development też jest znacznie prostsze w terminalu. Terminal z TMuxem można w 100% wygodnie obsłużyć bez użycia myszy, co jako osobie pracującej często w drodze bardzo pomaga. Narzędzia jak GHCi, Pry, bc, dc, find,
  • Odpowiedz
W sumie podpada to pod 3 tagi, więc sorry za spam, ale:

Jeśli w MySQL użyję: UPDATE tabela SET starenetto=netto, netto = 100, brutto = netto * 1,23;

to czy brutto mi się ustawi poprawnie na 123zł, a poprzednie netto zostanie zapamiętane?

W
  • 13
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@aaadaaam: generalnie to działa. Na 5.0 i 5.5. Schematy testowe jak wyżej "ustaw netto, wykorzystaj kolumnę do brutto" niby chodzą. "Generalnie" i "niby". Jako jednak, że w dokumentacji jest o magiczne "z reguły", a jest to system finansowy, to chyba nie odważę się puścić tego na większą skalę :)
  • Odpowiedz
@RRybak: Będzie dzialało do czasu....

a jest to system finansowy


Ja bym forsował refaktoryzacji aplikacji.

To się robi. Systemy się zmieniają coś co miało być na rok, służy potem wiele lat i pojawia się problem jak tutaj z ceną.
  • Odpowiedz
Protip: Nie przenoś zadań z bazy danych na wyższy poziom, jeśli baza może je wykonać samodzielnie. A już w szczególności durnotą jest robienie SELECT / INSERT w dwóch krokach, skoro można użyć znakomitego INSERT INTO ... SELECT .. ON DUPLICATE KEY UPDATE...

#mysql #sql
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Mirki mam problem chciałbym aby wszystkie - zamieniało mi na NULL lecz zapytanie które storzyłem wywala wszystko wszystkie rekordy (nawet te bez '-') co robię źle?

UPDATE baza SET Ilosc = REPLACE(Ilosc, '-', NULL)

#mysql #programowanie
  • 27
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Mirki, pobieram sobie dane z pewnego serwera problem w tym że brak danych oznaczają znakiem '-' a ja dane zapisuję jako typ numeric, więc - jest zamieniany na 0 co psuje całkowicie koncepcję. Jest możliwośc zmiany w komendzie mysqlowej żeby ten myślnik wstawiał jako nic?

#programowanie #sql #mysql
  • 9
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@msq:

@StaryHipopotam

Żeby nie było ... ja też jestem raczej za trzymaniem logiki po stronie aplikacji, ale nie nie zgadzam się z tym, że dla procedur składowanych nie ma miejsca w nowoczesnych aplikacjach. Programista powinien wiedzieć czym się różni młotek od śrubokrętu i wykorzystać odpowiednie narzędzie do danego zadania.
  • Odpowiedz
Mireczki kolejny raz miałem ten sam problem z wirtualnym hostingiem na ovh. Otóż strona zamiast się ładować zwraca błąd (504 - backend unavailable). Zaczęło się (już drugi raz) wczoraj koło 19 i trwało przynajmniej do 22, później nie sprawdzałem, bo już mnie krew zalewała (nie szperałem w ogóle w bazie danych, ani wczoraj, ani przez ostatnie dwa tygodnie).

Ostatnio okazało się, że problem leżał po ich stronie i po dwóch dniach go
  • 21
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@GoonSquad: nie no, po zobaczeniu strony nic niestety nie wywróżę. Admin musiałby zajrzeć w logi ale zakładam, że to zrobił stąd odpowiedź, że to przekroczenie akurat tej wartości. Czy faktycznie tak było? Nie wiem, OVH ma jakąś swoją konfiguracje, z swoimi błędami, ciężko mi powiedzieć. Teoretycznie w przypadku przekroczenia takiego limitu mysql zwraca błąd do PHP i ten wywala stosowny komunikat (lub jak ma wyłączone pokazywanie błędów to nic nie
  • Odpowiedz