Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL] Podwójne zapytania
Forum PHP.pl > Forum > Przedszkole
serv
Witam!

W skrypcie muszę wykonać takie zapytania:

  1. INSERT INTO art (id ,name) VALUES (NULL ,'pierwszy raz');

oraz
  1. INSERT INTO art_list (id ,name) VALUES (NULL ,'24');


Czy mogę te oba zapytania zmieścić w jednym?

Nie wypytujcie mnie o cel bo rozważałem wiele przypadków i podwójne zapytanie byłoby najlepszym rozwiązaniem dla mojego problemu.

Pozdrawiam!
f1xer
Uwierz mi że nie koniecznie spójrz na ten kod
  1. <?php
  2. $query = "INSERT INTO art (id, name) VALUES (NULL, 'pierwszy raz')";
  3. mysql_query($query) or die(mysql_error());
  4. $ostatnieid=mysql_insert_id();
  5. $query= "INSERT INTO art_list (id, name) VALUES (".$ostatnieid.", 'pierwszy raz')";
  6. mysql_query($query) or die(mysql_error());
  7. ?>


pisane z głowy więc jakiś błąd mógł się wkraść
serv
No i o to chodzi że ja MUSZĘ mieć jedno zapytanie które wywołam poprzez mysql_query($query); i po wszystkim...
Nie mogę mieć tam dwóch zapytań bo bym musiał cholernie zmieniać strukturę bazy.

A spójnik UNION by nie załatwił sprawy?
f1xer
wcale nie musisz zmieniać struktury bazy exclamation.gif zapewne chodzi ci o to zeby rekordy w tabeli art i art_list miały to samo ID i ten problem możesz rozwiązać tym kodem co ci podalem
serv
To może opowiem swoją historię od początku i jaśniej winksmiley.jpg

Mam skrypcik dzięki któremu użytkownik może zmieniać swoje dane podane przy rejestracji... Każdorazowa zmiana musi być potwierdzana kliknięciem na klucz w emailu a więc dane zapytanie zostaje zapisane do bazy i przypisany do niego odpowiedni klucz.
I problem tkwi w tym że dane osobowe i hasło jest definiowane w dwóch różnych tabelach a więc jeśli użytkownik chciałby jednocześnie zmienić i hasło i dane osobowe musiałyby być wygenerowane 2 różne zapytania, a żeby nie wysyłać 2 maili i nie zaśmiecać bazy chciałby spoić ze sobą oba te zapytania.

Mam nadzieje że nie naplątałem winksmiley.jpg
f1xer
moim zdaniem poplątałeś biggrin.gif ale ok spróbujmy inaczej po prostu najpierw sobie składasz zapytania do wykonania w jeden ciąg i zapisujesz go w tabeli a później jak już user aktywuje zmiany po prostu pobierasz cały ciąg i dzielisz go za pomocą funkcji split a następnie wykonujesz po kolei zapytania
np.
  1. <?php
  2. $zapytanie="SELECT * FROM Cos"; // to sa te zapytania dla zmian
  3. $zapytanie2="SELEC id FROM Cos";
  4. $zapytanieGlowne=$zapytanie."#".$zapytanie2; // to da ci 2 zapytania rozdzielone znakiem # zapisujesz je do bazy
  5. // i teraz po aktywacji wyciagasz te swoje zapytania
  6. $dowykonania=split('#',$zapytanieGlowne); // to zwroci tablice z zapytaniami
  7.  
  8. // tutaj petla w ktorej po kolei wykonasz zapytania zawarte w tablicy $dowykonania
  9. // zrob sobie print_r ($dowykonania) bedziesz wiedzial co tam jest
  10. ?>
serv
Zapamiętaj że jestem Ci winny piwo winksmiley.jpg

Dzięki smile.gif
ddiceman
Napisz sobie procedure skladowana, ktora zmieni Ci obie te wartosci
  1. DELIMITER //
  2. CREATE PROCEDURE set_pwd (_id integer, _value varchar(80))
  3. BEGIN UPDATE konta1 SET password = _value WHERE id = _id;
  4. UPDATE konta2 SET password = _value WHERE id = _id;
  5. END;
  6. //
  7. DELIMITER ;

i wywolujesz to jednym zapytaniem
  1. CALL set_pwd($id, '$haslo');
serv
  1. DELIMITER //
  2.  
  3. CREATE PROCEDURE set_pwd (_id integer, _value varchar(80))
  4. BEGIN UPDATE konta1 SET password = _value WHERE id = _id;
  5. UPDATE konta2 SET password = _value WHERE id = _id;
  6. END;
  7. //
  8. DELIMITER ;


Tego do końca nie rozumiem... Co robi linijka
  1. set_pwd (_id integer, _value varchar(80))
ddiceman
tworzy procedure o nazwie set_pwd, ktora przyjmuje parametry _id integer i _value typu varchar(80)
lord_t
Wywołuje a nie tworzy.

edit: Faktycznie;) Moje niedopatrzenie. Tworzy a nie wywołuje.
phpion
Cytat(lord_t @ 7.12.2008, 14:15:58 ) *
Wywołuje a nie tworzy.

Mylisz się - akurat tworzy.
ddiceman
Fragment kodu, o ktorym pisal serv
  1. set_pwd (_id integer, _value varchar(80))

zostala uzyta przeze mnie tylko w
  1. CREATE PROCEDURE set_pwd (_id integer, _value varchar(80))

wiec tworzy a nie wywoluje
f1xer
Cytat(serv @ 7.12.2008, 11:32:34 ) *
Zapamiętaj że jestem Ci winny piwo winksmiley.jpg


Po prostu kliknij pomógł smile.gif
serv
A więc użyłem tego tricku...

  1. <?php
  2. $zapytanie=&#092;"SELECT * FROM Cos\"; // to sa te zapytania dla zmian
  3. $zapytanie2=&#092;"SELEC id FROM Cos\";
  4. $zapytanieGlowne=$zapytanie.&#092;"#\".$zapytanie2; // to da ci 2 zapytania rozdzielone znakiem # zapisujesz je do bazy
  5. // i teraz po aktywacji wyciagasz te swoje zapytania
  6. $dowykonania=split('#',$zapytanieGlowne); // to zwroci tablice z zapytaniami
  7.  
  8. // tutaj petla w ktorej po kolei wykonasz zapytania zawarte w tablicy $dowykonania
  9. // zrob sobie print_r ($dowykonania) bedziesz wiedzial co tam jest
  10. ?>


Tylko kurcze nie działa mi ta pętla...
Zrobiłem coś takiego:

  1. <?php
  2. $a = 0;
  3. while ($dowykonania = split('#',$row['query'])) {
  4. mysql_query($dowykonania[$a]);
  5. $a = $a +1;
  6. }
  7. ?>


Niestety ta pętla liczy mi w nieskończoność wykonując przy tym te dwa zapytania...
Do dalszego działania dostawia "Query was empty" czyli pozostał pytania są puste i tu się zgodzę... Bo powinien wykonywać TYLKO $dowykonania[0] i $dowykonania[1]...
Wspomoże ktoś? :]

Pozdrawiam!
f1xer
zapisz to tak:
  1. <?php
  2. $a = 0;
  3. $dowykonania=split('#',$row['query']);
  4. while ($a!=count($dowykonania))
  5. {
  6. mysql_query($dowykonania[$a]);
  7. $a=$a+1;
  8. }
  9. ?>
serv
Super!
Dzięki 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.