Chcę zrobić skrypt w php, który wyciągnie z tabeli NASZE_ZAWODY pole idnz, przekaże je do tabeli ZAWODY_DYSCYPLINY i umożliwi mi dodanie do tej tabeli jednej lub kilku dyscyplin. W skrócie mówiąc ma to wyglądać tak:
ZAWODY_DYSCYPLINY
Kod
IDZD IDNZ IDD TERMIN
1- 2 - 1 - 12 06 2005
2 - 2 - 2 - 13 06 2005
3 - 2 - 3 - 13 06 2005
4 - 2 - 4 - 15 06 2005
5 - 2 - 5 - 15 06 2005
6 - 3 - 1 - 4 07 2005
7 - 3 - 10 - 5 07 2005
1- 2 - 1 - 12 06 2005
2 - 2 - 2 - 13 06 2005
3 - 2 - 3 - 13 06 2005
4 - 2 - 4 - 15 06 2005
5 - 2 - 5 - 15 06 2005
6 - 3 - 1 - 4 07 2005
7 - 3 - 10 - 5 07 2005
itp itd Myślę, że wiadomo o co chodzi.
I teraz tak: mam dwie stronki: a.php i b.php. Na tej pierwszej zrobiłem wybór idnz z tabeli NASZE_ZAWODY. Po naciśnięciu przycisku "wybierz" skrypt przechodzi do strony b.php, która ma za zadanie zaktualizowanie bazy
Skypt a.php:
<? $conn = mssql_connect(\"localhost\",\"user\",\"password\") or die(mssql_error()); $db = mssql_select_db(\"[Zawody lekkoatletyczne]\", $conn) or die(mssql_error()); $sql = \"SELECT nazwa, termin, idnz FROM NASZE_ZAWODY ORDER BY termin\"; if (!$sql_result) { } else { <h1>Wybierz zawody dla których chcesz edytować dyscypliny</h1> <FORM method=\"POST\" action=\"b.php\"> <p><strong>Wybierz zawody. Imprezy są ustawione wg dat.</strong><br> <select name=\"sel_record\"> <option value=\"\"> -- Wybierz zawody -- </option>\"; while ($row = mssql_fetch_array($sql_result)) { $idnz = $row[\"idnz\"]; $nazwa = $row[\"nazwa\"]; $termin = $row[\"termin\"]; } </select> <P align=center><INPUT type=\"submit\" value=\"Wybierz\"></p> </FORM>\"; } ?>
Przęglądarka przechodzi na stronę b.php i jest wszystko ok. Widzę wybrane zawody, czyli zmienna dobrze się przeniosła

idzd (autoinkrementacja)
idnz (pobrany ze skryptu a.php),
idd (pobrany z tabeli DYSCYPLINY,
termin (pobrany z ze skryptu wyżej).
Mój problem polega na tym, że nie wiem jak połączyć ową feralną zmienną z tabeli NASZE_ZAWODY i przekazał ją do ZAWODY_DYSCYPLINY a jednocześnie żeby dodał idd z DYSCYPLINY to ZAWODY_DYSCYPLINY. Próbowałem już to zrobić podzapytaniem takim:
$sql = "UPDATE ZAWODY_DYSCYPLINY
SET idnz =
(SELECT * FROM NASZE_ZAWODY
WHERE idnz = '$_POST[sel_record]')";
Ale ponieważ nie poszło mi już na tym skrypcie to nie próbowałem nawet JOIN-ować to z 3 tabelą (DYSCYPLINY). Błąd, który mi się ukazał to:
Warning: mssql_query(): message: Only one expression can be specified in the select list when the subquery is not introduced with EXISTS. (severity 16) in c:\...\b.php on line ...
EDIT >>
Heh, że tak powiem sam sobie pomogłem. Zmieniłem zapytanie $sql z UPDATE na INSERT (rzecz jasna). Teraz wygląda to tak:
$sql = "SET IDENTITY_INSERT ZAWODY_DYSCYPLINY ON EXEC zet INSERT INTO ZAWODY_DYSCYPLINY (idzd, idnz, idd, termin) VALUES (' ', '$_POST[sel_record]', '10', '2003-12-01')";
Jak widać dodałem też procedurę 'zet'. Miała mi ona służyć do tego by pobierać największe pole idzd (które jest kluczem gł. i typu autoincrement).
Składnia mojej procedury wygląda tak:
CREATE PROCEDURE zet AS declare @idzd int SET @idzd = (SELECT max(idzd) FROM ZAWODY_DYSCYPLINY) SELECT @idzd+1 GO
Składnię wziąłem z tego tematu. Po włączeniu Query analyzera i wywołaniu procedury wszystko jest ok - pole idzd zwiększa się o 1. Niestety w kodzie php już to nie działa ponieważ zamiast wrzucać każdą następną wartość większą o 1 od ostatniego wpisanego idzd to kod cały czas uparcie wstawia mi pole z idzd = 0. Czy ktoś mi pomoże?