Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z delete z dwóch tabeli oraz selectem
Forum PHP.pl > Forum > Bazy danych > MySQL
Tygryska
Witam mam problem , nie wiem jak usunąć jednocześnie dane z dwóch tabel... tabele mam skonstrułowane nastepujaco jedna polskie( id_p, slowo_p, opis_p) druga angielskie (id_a, slowo_a, opis_a) one sa ze soba połaczone w trzeciej tabeli laczaca (id_l, id_p, id_a).... i nie wiem jakiego uzyc selecta abym mogła usunąc dane z tabeli polskie i jednoczesnie dane z tabeli angielskie.... do tego mam jeszcze jeden problem....chciałabym moc zmodyfikowac jakies slowo np polskie- slowo_p takbym mogła wpisac dane wszystkie tzn zeby mogło mi wyszukac szukane slowo , ale zebym mogła zmodyfikowac dane jednoczesnie z dwoch tabel tj: slowo_p, opis_p, slowo_a, opis_a. i zeby zapisało zmiany do dwoch tabel. Nie wiem jak to rozgrysc....Bardzo prosze o pomoc
dziekuje
ania[/sql] dry.gif
Moriturius
a co masz dane?
tzn. na podstawie jakich wartości chcesz usunąć dane?
Tygryska
chciałabym wyczyscic tabelki
tabelki sa takie:
1. POLSKIE
id_p klucz
slowo_p
opis_p
2.ANGIELSKIE
id_p klucz
slowo_a
opis_a
3.LACZONA
id_l
id_p
id_a

ma to byc słownik i chciałabym abym po wybraniu jakiegos slowa np. z tabelki polskie usunał mi go takze w tabelce angielskie...bo dodawanie słowa jest takie ze wpisuje slowo_polskie, opis_polski, slowo_angielskie, opis_angielski... czyli dodaje mi do dwoch tabel..teraz chce aby po wybraniu jakiegos slowa np z tabelki polskie usunał go takze w tabelce angielskie...mam taki sam problem ze zmodyfikowaniem (edycja) jakiegos slowa....czyli wyszukanie i zmodyfikowanie do dwoch tabel.
Mam nadzieje ze jakos ułatwiłam zadanie
batman
Załóżmy, że chcesz usunąć z tabeli polskie wiersz o id równym 5. Rozumiem, że ma usunąć z tabeli angielskie taki sam wiersz, ale nie koniecznie o takim samym id? Jeśli tak to robisz to w następujący sposób:

  1. DELETE FROM polskie WHERE id_p = 5;
  2. DELETE FROM angielskie WHERE id_a IN (SELECT id_a FROM laczenie WHERE id_p = 5);


Co do modyfikacji nie do końca rozumiem o ci Ci chodzi. Jeśli być to jaśniej napisała, wówczas coś by się wymyśliło winksmiley.jpg

edit
Pisaliśmy w tym samym momencie winksmiley.jpg

Modyfikację robisz tak samo:

  1. UPDATE polskie SET costam = 'jakis tekst' WHERE id_p = 5;
  2. UPDATE angielskie SET costam = 'jakis tekst' WHERE id_a IN (SELECT id_a FROM laczenie WHERE id_p = 5);
Tygryska
id sa takie same po to stworzyłam tabelke łaczaca.... naprzykład wyszukuje slowo np. kot i posiadam cos takiego:
slowo_p - kot, opis- przyjaciel domu
slowo_a- cat, opis_a- jakies tam....
i jak wchodze do słownika pol-ang wyszukam kot to chce go usunac z tabel polskie i angielskie jednoczenie..
tak samo chciałabym z modyfikowaniem .... robie to w mysql-u i w php napisałam takze wyrazenie ktore bedzie sprawdzało czy podano argumenty wyszukiwania

dziekuje za pomoc .....ide dalej myslec
batman
Jeśli id jest takie identyczne w obu tabelach, to możesz usunąć tabelę łączącą i wstawić id_p do tabeli angielskie jako klucz obcy ustawiony na casacade. Wówczas podczas usuwania z jednej tabeli, dane będą usuwane z drugiej. Modyfikacja jednak będzie musiała odbywać się w dwóch zapytaniach.
Moriturius
no to ja bym zrobił coś takiego:

np.: mamy dane polskie słowo i chcemy żeby usunął je ze słownika

1) wyszukaj w tabeli polskich słów to słowo które chcesz usunąć i pobierz jego id_p (można olać ten krok jeśli id_p już mamy)
2) wywal to słowo z polskiej tabeli
3) pobierz id_a z jakimi słowami łączy się id_p i też je wywal z tabeli łączącej
4) wywal z tabeli angielskiej te słowa których id_a pobrałaś w 4 kroku

nie chce mi się tego na php pisać teraz, ale to chyba już nie będzie taki problem

// EDIT:
w sposobie batmana brakuje usuwania danych z tabeli łączącej
Tygryska
jak stworzyc zapytanie selecta ktory wyszuka mi jakies slowo z tabeli polskie , ale jednoczesnie wyszuka mi go w angielskich wraz z opisami czyli bede miała pełny opis slowo_p, opis_p, slowo_a, opis_a
batman
Jeśli obie tabele mają takie same wartość id, to:
  1. SELECT * FROM polskie p, angielskie a WHERE p.id_p = 5 AND a.id_a = 5;


Zamiast * wstaw, to co potrzebujesz wyjąć.
Tygryska
<?php
$wyrazenie=$HTTP_POST_VARS['wyrazenie'];
$wyrazenie = trim($wyrazenie);
if (!$wyrazenie)
{
echo 'Brak parametrow wyszukiwania.';
exit;
}
$wyrazenie = addslashes($wyrazenie);
@ $db = mysql_connect('localhost', 'anna', 'anna');
if (!$db)
{
echo 'Blad: Polaczenie z baza danych nie powiodlo sie. Sprobuj jeszcze raz..';
exit;
}
mysql_select_db('polang');
//$zapytanie = "select P.slowo_p, A.slowo_a, P.opis_p, A.opis_a from P.polskie, A.angielskie, L.laczona where L.id_p=L.id_a like '$wyrazenie'";
$zapytanie =""
$wynik = mysql_query($zapytanie);
$ile_znalezionych = mysql_num_rows($wynik);
if($ile_znalezionych==0)
{
echo " Przykro mi, nie znaleziono żadnego słowa: $wyrazenie<br/>";
} else
{
echo '<p>Ilość znalezionych pozycji: '.$ile_znalezionych.'</p>';
for ($i=0; $i <$ile_znalezionych; $i++)
{
$wiersz = mysql_fetch_array($wynik);
echo '<p> ߐ Słowo polskie: ';
echo stripslashes($wiersz['slowo_p']);
echo '<strong> | Slowo angielskie: ';
echo stripslashes($wiersz['slowo_a']);
echo '</strong> | Opis polski: ';
echo stripslashes($wiersz['opis_p']);
echo '</strong> | Opis angielski: ';
echo stripslashes($wiersz['opis_s']);
echo '</p>';
}
}
?>
<h3>Usuwanie rekordu z bazy</h3>
<form action="usun_polskie.php" method="post">
<table border="0">
<TR><TD>ID:</TD><td><input type="text" name="id_p" maxlength="5" size="5"><br/></td></TR>
<TR><TD colspan="2"><input type="submit" value="USUN"></TD></TR>
</table>
</form>
</body>
</html>

załaczam kod jaki musze zmodyfikowac i nie wiem jaki wpisac select do wyszukanie danego slowa z tabel

a tutaj mam kod do modyfikowania
<b>****Modyfikuj polskie slowo****</b>
<h2 style="border-bottom-style : ridge;">Rezultaty wyszukiwania</h2>
<?php
$wyrazenie=$HTTP_POST_VARS['wyrazenie'];
$wyrazenie = trim($wyrazenie);
if (!$wyrazenie)
{
echo 'Brak parametrów wyszukiwania.';
exit;
}
$wyrazenie = addslashes($wyrazenie);
@ $db = mysql_connect('localhost', 'anna', 'anna');

if (!$db)
{
echo 'Blad: Polaczenie z baza danych nie powiodlo sie. Sprobuj jeszcze raz.';
exit;
}
mysql_select_db('polang');
//$zapytanie = "select P.slowo_p, A.slowo_a ,P.opis_p, A.opis_a from P.polskie, A.angielskie, where P.idp=A.idp '$wyrazenie'";
$zapytanie = "select * from P.polskie join A.angielskie on P.slowo_p=A.slowo_a like '$wyrazenie'";
$wynik = mysql_query($zapytanie);
$ile_znalezionych = mysql_num_rows($wynik);
if($ile_znalezionych==0)
{
echo "Nie znaleziono żadnego słowa: $wyrazenie<br/>";
exit();
} else
{
echo '<p>Ilość znalezionych pozycji: '.$ile_znalezionych.'</p>';
for ($i=0; $i <$ile_znalezionych; $i++)
{
$wiersz = mysql_fetch_array($wynik);
echo '<p> »<b> Slowo polskie: </b>';
echo stripslashes($wiersz['slowo_p']);
$slowo_p=stripslashes($wiersz['slowo_p']);
echo '<strong > | Slowo angielskie: ';
echo stripslashes($wiersz['slowo_a']);
$slowo_a=stripslashes($wiersz['slowo_a']);
echo '</strong> | <b>Opis polski: </b>';
echo stripslashes($wiersz['opis_p']);
$opis_p=stripslashes($wiersz['opis_p']);
echo '</strong> | <b>Opis angielski: </b>';
echo stripslashes($wiersz['opis_a']);
$opis_a=stripslashes($wiersz['opis_a']);
echo '<br/>';
echo "<a href='wybor_pol_mod.php?slowo_p=$slowo_p&slowo_a=$slowo_a&opis_p=$opis_p&opis_a=$opis_a'>Edycja</a>";
echo '</p>';
}
}
?>

<h3>Modyfikacja rekordu w bazie</h3>
<form action="insert_polang.php" method="post">
<table border="0">
<TR><TD>ID:</TD><td><input type="text" name="id" maxlength="5" size="5"><br/></td><td></td></TR>
<TR><TD>SŁOWO POLSKIE:</TD><td><input type="text" name="slowo_p" maxlength="50" size="50"><br/></td></TR>
<TR><TD>SŁOWO ANGIELSKIE:</TD><td><input type="text" name="slowo_a" maxlength="50" size="50"><br/></td></TR>
<TR><TD>OPIS POLSKI:</TD><td><input type="text" name="opis_p" maxlength="50" size="50"><br/></td></TR>
<TR><TD>OPIS ANGIELSKI:</TD><td><input type="text" name="opis_a" maxlength="50" size="50"><br/></td></TR>
<TR><TD colspan="2"><input type="submit" value="MODYFIKUJ"></TD></TR>
</table>
batman
Możesz zrobić to tak:
  1. <?php
  2. $zapytanie = "select P.slowo_p, A.slowo_a, P.opis_p, A.opis_a from P.polskie, A.angielski
    e, L.laczona where L.id_p=L.id_a and (P.slowo_p like '%"
    .$wyrazenie."%' or A.slowo_a like '%".$wyrazenie."%' )";
  3. ?>
Tygryska
dzieki 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.