Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Wiele cech w jednym zapytaniu
Forum PHP.pl > Forum > Przedszkole
whydah
Witam,
mam tabele z cechami towarów która wygląda mniej więcej tak:

symbol | cecha
1 | cecha 1
1 | cecha 3
2 | cecha 1
2 | cecha 2

czyli jeden towar wiele cech
do tej pory dodawałem tylko 1 cechę na raz obecnie chcę rozbudować skrypt o możliwość dodania do trzech cech towaru na raz
i na poczekaniu powieliłem INSTERTA ( odpowiednie wartości z formularzy )

  1. if (strlen($_POST["cecha_id"])) {
  2. $strSql = "INSERT INTO symbolcecha (SYM,cecha_id) SELECT SYM,'".$_POST['cecha_id']."' FROM towary WHERE EAN = '".$_POST['EAN']."'";
  3. mysql_query($strSql, $conn); }
  4. if (strlen($_POST["cecha2_id"])) {
  5. $strSql = "INSERT INTO symbolcecha (SYM,cecha_id) SELECT SYM,'".$_POST['cecha2_id']."' FROM towary WHERE EAN = '".$_POST['EAN']."'";
  6. mysql_query($strSql, $conn); }
  7. if (strlen($_POST["cecha3_id"])) {
  8. $strSql = "INSERT INTO symbolcecha (SYM,cecha_id) SELECT SYM,'".$_POST['cecha3_id']."' FROM towary WHERE EAN = '".$_POST['EAN']."'";
  9. mysql_query($strSql, $conn); }


powiedzmy ze robi co ma robić cechy lądują tam gdzie powinny nan ten moment jest ok.

po wykonaniu operacji wyświetlam odpowiednią informację o powodzeniu i tu mam najpoważniejszy problem
z jedną cechą nie było problemu ale jak wyświetlić ze dodano 3 cechy ?

jednej cechy nazwę pobieram tak:
  1. if (strlen($_REQUEST["cecha_id"]) && $_REQUEST["cecha_id"] != '0' ) $strWhere .= "sl_cechatw.id = '".$_POST['cecha_id']."' AND ";
  2. // if (strlen($_REQUEST["cecha2_id"]) && $_REQUEST["cecha2_id"] != '0' ) $strWhere .= "sl_cechatw.id = '".$_POST['cecha2_id']."' AND ";
  3. // if (strlen($_REQUEST["cecha3_id"]) && $_REQUEST["cecha3_id"] != '0' ) $strWhere .= "sl_cechatw.id = '".$_POST['cecha3_id']."' AND ";
  4. if (!empty($_POST["symbol"])) $strWhere .= "towary.SYM = '".$_POST['symbol']."' AND ";
  5. if (!empty($_POST["EAN"])) $strWhere .= "towary.EAN = '".$_POST['EAN']."' AND ";
  6. if (strlen($strWhere)) $strWhere = substr($strWhere, 0, strlen($strWhere) - 5);
  7.  
  8.  
  9. $sql = "SELECT towary.SYM, towary.NAZWA, towary.EAN, sl_cechatw.nazwa AS CECHA FROM towary
  10. INNER JOIN sl_cechatw ";
  11.  
  12. if (strlen($strWhere)) {$sql .= "WHERE ".$strWhere;} else { $sql .= "";}
  13. //echo $sql;


jako komentarz są dodane dwie pozostałe cechy ale w taki sposób zwraca mi 0 rekordów

i odpowiednie info
  1. echo ' <div class="successbox">'.$eol;
  2. echo ' <p><b>INFORMACJA</b></p><p>Dodano Cechę<b> '.$row['CECHA'].'</b> do <b>'.$row['SYM'].'</b> '.$row['NAZWA'].'</p>'.$eol;
  3. echo ' </div>'.$eol;

chciałbym wyświetlić to w ten sposób:

Dodano Cecha 1, Cecha 2, Cecha 3 do 'SYMBOL - NAZWA'

da się to zrobić za pomocą jednego zapytania ?
ViX
Jeśli dobrze rozumiem Twój problem to powinieneś w SQLu wrzucić:

  1. $strWhere .= "sl_cechatw.id = '".$_POST['cecha2_id']."' OR ";


Pisząc sl_cechatw.id = x AND sl_cechatw.id = y AND sl_cechatw.id = z
szukasz rekordu w którym wartość komórki id za jednym zamachem jest równa x, y i z, co jest niemożliwe.
W przypadku zastosowania "OR" prosisz bazę o rekordy w których komórka id jest równa x, y lub z czyli pobiera Ci każdą z tych trzech smile.gif
A gdybyś ładnie formularz ubrał w JS/jQuery, a PHP i zapytanie SQL w pętle, mógłbyś używać wielu cech (nawet dla każdego produktu innej ilości) wink.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.