Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MYSQL] IF NOT EXISTS, zapytanie z EXISTS
Tomplus
post
Post #1





Grupa: Zarejestrowani
Postów: 1 885
Pomógł: 231
Dołączył: 20.03.2005
Skąd: Będzin

Ostrzeżenie: (0%)
-----


Witam,

Mam pytanie,

Chciałem skrócić kod i wpadłem na pomysł że to co mogę w paru liniach zrobić w PHP mogę w jednej linii zrobić w MYSQL, ale.... coś nie wychodzi.

Mam nast. zapytanie SQL:
Kod
IF NOT EXISTS
     SELECT `uid`,`link` FROM `link_logs` WHERE `uid` = '67' AND `link` = '0'
  THEN
     INSERT INTO `link_logs` (`uid`, `link`) VALUES ('67', '0')
END IF;


wypróbowałem też zapytanie bez IF:

Kod
INSERT INTO `sm_link_logs` (`uid`, `link`) VALUES ('67', '0')
  WHERE
    NOT EXISTS (
      SELECT `uid`,`link` FROM `sm_link_logs` WHERE `uid` = '67' AND `link` = '0'
    );


Wg. tego co się dowiedziałem to w ten sposób powinno wyglądać zapytanie.
Jednak nie pojawia się żaden błąd MySQL (co sugeruje mi że nie ma błędu parsera w zapytaniu) ale jest błąd logiczny bo mimo że tabela jest pusta, Nie pojawia się nowa liniia.

z założenia jest że jeżeli nie istnieje uid i link o podanych wartościach to ma stworzyć nową wartość w tabeli o takich wartościach.

Wiedzę na ten temat znalazłem tu:
http://forums.mysql.com/read.php?98,33383,33784#msg-33784 oraz
http://lists.mysql.com/replication/220

Prosiłbym o pomoc przy tym zapytaniu.

Ten post edytował Tomplus 12.02.2011, 19:39:55
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
trafas
post
Post #2





Grupa: Zarejestrowani
Postów: 87
Pomógł: 12
Dołączył: 31.05.2006

Ostrzeżenie: (0%)
-----


Pierwszy przykład nie umożliwi Ci wprowadzenia danych. Pokazałem Ci tylko sposób, jak skorzystać z polecenia EXISTS poza procedurą.

Do wprowadzenia zmian możesz użyc funkcji lub procedury.
Z poziomu PHP procedurę wykonujesz zapytaniem:

  1. mysql_query("CALL nazwa_procedury");


funkcję wykonujesz przez wykonaie zapytania:

  1. mysql_query("SELECT nazwa_funkcji");


Funkcja do sprawdzenia istnienia wiersza i przy jego braku wpisanie go do bazy:


  1. DELIMITER //
  2. CREATE FUNCTION sprawdz(uid INT, link varchar(30)) RETURNS VARCHAR(50)
  3. BEGIN
  4.  
  5. IF NOT EXISTS (SELECT 1 FROM `sm_link_logs` WHERE `uid` = uid_in AND `link` = link_in)
  6. THEN
  7. INSERT INTO `link_logs` (`uid`, `link`) VALUES (uid_in, link_in);
  8. RETURN 'rekord został dopisany';
  9. ELSE
  10. RETURN 'rekord już istnieje';
  11. END IF;
  12.  
  13. END //
  14. DELIMITER ;


Wykonanie w PHP:

  1. $query = "select sprawdz(67,'0')";
  2. $data = mysql_query($query) or die (mysql_error());
  3. $dane = mysql_fetch_array($data);
  4. echo "Wynik działania funkcji : ".$dane[0];


Pozdrawiam.

Ten post edytował trafas 13.02.2011, 15:00:03
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 27.12.2025 - 21:07