Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kontrola INSERT przy pomocy 2 bazy
Forum PHP.pl > Forum > Bazy danych > MySQL
JohnySpot
Bazy wyglądają mniej więcej tak:

Zbiór wszystkich dostępnych elementów
ELEM E
id | elem
1 | a
2 | b

Zbior elementow z przypisanymi wartościami
ZBIOR Z
id | id_e | wartosc
1 | 1 | 20
2 | 1 | 22
3 | 2 | 2
4 | 4 | 5


I teraz dwa pytania:

1) Do tabeli ZBIOR można dodawać tylko elementy występujące w tabeli ELEM - czy da się to zrobić sprytniej niż najpierw robić SELECT sprawdzający czy istnieje taki a potem dopiero INSERT jeżeli tak jest.
(ma być też opcja wstawiania 10 na raz, może chociaż dałoby się to udoskonalić zamiast robić 10 SELECT-ów dla każdego elementu z osobna, to jakoś sprawdzić, które są, które nie z tych 10ciu)

2) To się wiąże z tym górnym pytanie, czy bez select-a dałoby się wstawiać odrazy id elementu a nie jedgo nazwę, bo do formularza w PHP jest wprowadzana nazwa (no i tak już raczej zostanie) ?

Będę bardzo wdzięczny za wszelkie odpowiedzi i pomoc. Z góry wszystkim bardzo dziękuję za pomoc i zaangażowanie.
Norbas
Cytat
Bazy wyglądają mniej więcej tak:
To nie są bazy, tylko tabele winksmiley.jpg

Rozumiem, że nazwy i wartości elementów wprowadzasz w formularzu. Przy założeniu, że nazwy elementów są w polach 'e1', ..., 'e10', a wartości w polach 'w1', ..., 'w10' możesz wykonać 10 zapytań:
Kod
for($i = 1; $i <= 10; ++$i)
  if (($_POST['e' . $i] != '') && ($_POST['w' . $i] != '')) {
    $sql = 'INSERT INTO zbior (id_e,wartosc) SELECT id,' . intval($_POST['w' . $i]);
    $sql .= ' FROM elem WHERE elem="' . mysql_real_escape_string($_POST['e' . $i]) . '"';
    @mysql_query($sql);
  }

Albo najpierw odczytać identyfikatory i zbudować odpowiednie zapytanie:
Kod
$elementy = array();
for($i = 1; $i <= 10; ++$i)
  if (($_POST['e' . $i] != '') && ($_POST['w' . $i] != '')) $elementy[$_POST['e' . $i]] = intval($_POST['w' . $i]);
if (sizeof($elementy)) {
  $result = @mysql_query("SELECT id,elem FROM elem WHERE elem IN ('" . implode("','", array_keys($elementy) . "')");
  if ($result) {
    $sql = '';
    while ($row = mysql_fetch_assoc($result)) $sql .= '(' . $row['id'] . ',' . $elementy[$row['elem']] . '),';
    if ($sql) @mysql_query('INSERT INTO zbior (id_e,wartosc) VALUES ' . substr($sql, 0, strlen($sql)-1));
}
JohnySpot
Nie wiem czy sobie dam radę, ale wielkie dzięki smile.gif Bardzo dziękuję za pomoc winksmiley.jpg
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.