Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: warunek IF
Forum PHP.pl > Forum > PHP
michal_robak
Witam ponownie.Mam mały problem.Potrzebuje jedenej rzeczy do mojego skryptu.Sprawa ma sie tak:
Mamy np jedną tabele o nazwie tytul z dwoma polami id oraz tytul i w niej takie trzy wartości:
id | tytul
1 | obcy
2 | star wars
3 | matrix

No i teraz moje zapytanie.Chcem zrobić coś takiego że wpierw wydam zapytanie :
select *from tytul where tytul='obcy';
i teraz chcem wprowadzić warunek który wpierw sprawdzi czy jest taki tytul o nazwie 'obcy' i jeżeli tak to niech wypisze np echo 'juz istnieje' (bez wypisywania tej linii z 'obcym') a jeżeli nie to niech doda kolejne zapytanie:
insert into tytul(tytul) values ('obcy');
Jest możliwość żeby zrobić coś takiego questionmark.gif.


Oraz druga opcja
Chcem po prostu dodać do tabeli wartość :
insert into tytul(tytul) values ('obcy');
i tu wyskoczy komunikat :
duplicate key violates unique constraint ....
ponieważ już taka wartośći istnieje.No i teraz podobnie jak poprzednio jeżeli istnieje to niech wypisze ze juz taka wartość jest a jeżeli nie to niech ją doda.Mam nadzieje że wszystko jasne smile.gif
Sam za bardzo nie wiem jak zrobić ten warunek żeby sprawdził czy to istnieje czy nie:(.A do mojego skryptu potrzebuje troche bardziej zaawansowanego zapytania ale jeżeli bede wiedział jak zrobić tą rzecz to z tamta sobie poradze smile.gif.

--------------------------------------------------------
w wolnych chwilach --------> guitar.gif cool.gif
MalyKazio
Zgodnie z moją skromną wiedzą na temat php to byłoby jakoś tak:

  1. <?php
  2. /* $_POST bo pewnie przez jakiś formularz mialoby isc zapytanie */
  3. $zapytanie = 'SELECT * FROM tytuly WHERE tytul="'.$_POST['tytulfilmu'].'"';
  4. $wykonaj = mysql_query($zapytanie);
  5. $znaleziono = mysql_num_rows($wykonaj);
  6. if ($znaleziono == 0) {
  7. $dodajemy = "INSERT into tytul(tytul) VALUES ('$_POST[tytulfilmu]');"
  8. $wykonaj = mysql_query($dodajemy);
  9. } else {
  10. echo "Tytul juz istnieje";
  11. }
  12. ?>


To tak na moj chlopski rozum i zgodnie z moja skromna wiedza
michal_robak
Wielkie dzieki o to mi chodziło.Było parę błędów w kodzie ale t mały pryszcz był smile.gif.
Oto jak wygląda kod po zamianie:

  1. <?php
  2. $zapytanie = "SELECT * FROM tytul WHERE tytul='".$_POST['pole2']."'";
  3. $wykonaj = pg_query($zapytanie);
  4. $znaleziono = pg_num_rows($wykonaj);
  5. if ($znaleziono == 0) {
  6. $dodajemy = "INSERT into tytul(tytul) VALUES ('".$_POST['pole2']."')";
  7. $wykonaj = pg_query($dodajemy);
  8. } else {
  9. echo "Tytul juz istnieje";
  10. }
  11. ?>


zamieniłem tam jak widzisz mysql na pg ponieważ były błędy.Wie ktos moze co oznacza taki błąd:
  1. Warning: pg_query(): Query failed: ERROR: syntax error at or near "Resource" at character 1 in c:\usr\krasnal\www\bazy\dodaj2.php on line 69


Wielkie dzieki za info jak to zrobić exclamation.gif
MalyKazio
Proszę bardzo, czasem może zdaży mi się komuś pomóc zamiast samemu ciągle prosić o pomoc smile.gif
Co do zmiany na pg_query to to akurat chyba kwestia rodzaju uzywanej bazy danych smile.gif
thornag
Ja bym jeszcze przeksztalcil pierwsze zapytanie na takie za COUNT zeby nie trzeba bylo wywolywac mysq_num_rows. Ot kosmetyka/optymalizacja.
michal_robak
Mówisz zmienić na conut.Nie używałem tej komendy wcześniej ale jak teraz sobie przejrzałem co to jest to może i spróbuje coś zmienić.Ale nie wiem czy będe używać komend których mój prowadzący zajęcia nie umie hehe.

-----------------------------------------------
w wolnych chwilach ----> guitar.gif
michal_robak
Jeszcze mam jedno pytanie.Nie bede zakładać nowego wątku więc skorzystam z tego.
Mamy taka tabele smile.gif (pole id to bigserial,czyli automatycznie dodaje kolejne numery id-ów):
id | tytul
1 | obcy
2 | star wars
3 | matrix

Teraz jak cos do niej dodam polecenie
  1. <?php
  2. insert into tytul(tytul) values ('kiler');
  3. ?>


to doda sie czwarty wiersz
4 | kiler
No i teraz jak go usune i ponownie wpisze to polecenie
  1. <?php
  2. insert into tytul(tytul) values ('kiler');
  3. ?>

to doda mi sie
5 | kiler
i cala tabela tygląda tak:
id | tytul
1 | obcy
2 | star wars
3 | matrix
5 | kiler

Czy da sie zrobić coś żeby on dodawał te liczby w kolejności jakie są już dodane a nie jakie były wcześniej dodawane.Bo jak widać pozostaje puste miejsce miedzy id 3 a 5(a chcesz żeby zamiast tej 5 była 4).Nie wiem czy jest to jasne co mówie bo nie wiem jak to omówić smile.gif.
mike
Zmuszanie bazy do indeksowania po kolei to głupota.
Działanie wbrew ideii relacyjności baz.
Chociaż można to zrobić, musiałbyś zdjąć auto_increment z tego pola a przy każdej operacji na tej tabeli (INSERT) uruchamiać wcześniej napisanego triggera, który sam obliczy nowe id

Ale i tak musisz wiedzieć że to głupota. Nierób tak.

Pownieneś raczej inaczej zroganizować sowją aplikację niż zmuszać bazę do tego.
michal_robak
aha ok dzieki za info smile.gif.Temat zamknięty w takim razie smile.gif
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.