Skocz do zawartości

[mysql] Warunkowe dodawanie rekordów


dj.drezyna

Polecane posty

Mam taki o to kod jak poniżej i on nie działa prawidłowo, po prostu zapytanie wysłane przez php nie daje pożądanego rezultatu, czyli do tabeli nie dodaje się poniższy rekord.

 SELECT IF(((SELECT COUNT(aut) FROM oc WHERE aut='Mario') > 0),(INSERT INTO oc VALUES('Ufpwe2497', '35', 'Mario', '2000-06-15', '0')),'')

Wiem, że można to obejść przez zapytanie takie jak w warunku i potem przyjąć jakąś tam flagę po czym przez zwykły if z php wykonać zapytanie dodania rekordu ale jak można to zrobić z samym tylko mysql?

 

Zrobić to, czyli dodać dany rekord wtedy i tylko wtedy gdy pewne dane nie znajdują się w tej samej tabeli?

Galeria przyrodnicza http://fotokrajobrazy.warmia.pl

Link do komentarza
Udostępnij na innych stronach

A no chodzi mi o korzystanie ze wzorca MVC np. w Javie EE, bez ręcznego pisania zapytań, zamiast kluczy obcych referencje itp.

 

Coś jak w Google App Engine, można tam pisać w Javie i Pythonie. Aby zdefiniować tabelę tworzy się odpowiednią klasę z odpowiednimi polami dziedziczącą po klasie db.Model i za pomocą

jej metod wstawia/wyciąga się rekordy.

Link do komentarza
Udostępnij na innych stronach

wydaje mi się że w php będzie to mało wydajne

 

edit

rozwiązanie na które wpadłem jednak nie zadziała

 

to zapytanie jest bardzo dziwne, jeżeli mam jakieś auto to mogę dodać kolejne a jeśli nie mam żadnego to nie mogę dodać nowego

ale skąd wzięło się to pierwsze

coś takiego triggerem raczej nie przejdzie

Link do komentarza
Udostępnij na innych stronach

Niczego nie trzeba komplikować. Po prostu chodzi mi o to żeby w razie kiedy w danej tabeli jest już jakaś dana w danym rekordzie np to że głos został oddany to już drugi raz nie dopisze się rekord z oceną. Taki przykład i tak też o to właśnie mi chodzi, żeby baza danych się tym zajęła i zrobić to w jednym zapytaniu a nie zapytać się jaki jest wynik (czy jest ten rekord) i dopiero potem drugi raz wykonywać bądź nie zapis nowej oceny.

Galeria przyrodnicza http://fotokrajobrazy.warmia.pl

Link do komentarza
Udostępnij na innych stronach

no dobra teraz rozumiem

mam "półśrodek" w niedziele spytam wykładowce jak to zrobić poprawnie

CREATE TRIGGER tgINSERToc BEFORE INSERT ON da
FOR EACH ROW
BEGIN
DECLARE num_rows int;
SELECT COUNT(*) INTO num_rows FROM oc WHERE oc.aut=NEW.aut;
IF num_rows > 0 THEN
DELETE FROM NEW;
END IF;
END
_7)-ĘknvZv]Z'kFę-ŚŁDZxgę-jWzJ+vx-jxvZ'{3zxxk'ŚJ+fĘuzJ+v0ĘZuuT4lŹW
ALTER TABLE oc 
ADD CONSTRAINT 
un UNIQUE(aut)

 

edit2:

wygląda na to że nie da się tego prosto zrobić jeżeli potrzebujesz ograniczenie niż max 1

jedynie możesz pozostać przy obecnym rozwiązaniu(z triggerem i błędem o braku tabeli) lub jeżeli masz MySQL --version >= 5.5 da się tworzyć własne komunikaty błędów (nie pamiętam jak ale na google na pewno znajdziesz)

Link do komentarza
Udostępnij na innych stronach

Jeny, nie wiedziałem, że to takie skomplikowane. Poprzednio z użyciem *.csv po prostu sprawdzało się w php funkcją in_array i po sprawie a tu taki kłopot, myślę, że lepiej zastosuję te flagi co wspominałem kilka postów wcześniej nawet uważam, ze będzie wydajniejsze.

 

Dziękuję bardzo wszystkim za podjęte próby wyjaśnienia. Może uda się jeszcze inaczej.

Galeria przyrodnicza http://fotokrajobrazy.warmia.pl

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...