Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zapytanie SQL z uzyciem tablicy
Forum PHP.pl > Forum > PHP
attimo
Moje pytanie brzmi czy da się jakoś wybrać poprzez warunek WHERE w funkcji SELECT elementy ktore maja taka sama wartosc jak elementy innej tablicy. czyli np. SELECT id, cos2 from tabela WHERE id = $tab['xxx'] chciałbym aby to zapytanie wybrało z bazy wszystkie rekordy ktore maja taka samą wartosc co dane w tabeli. zalozmy, że mamy id: 1,2,3,4,5,6,7,8,9 a wartosci w tabeli to 2,4,5,6,8 chce aby funkcja mysql_fetch_assoc zwrocila cos2 dla id rownego 2,4,5.
altruista2
Przykład:
  1. SELECT Tabela1.Wartosc1, Tabela1.Wartosc2 FROM Tabela1, Tabela2 WHERE Tabela1.ID=Tabela2.ID AND Tabela2.ID>10


chyba że druga tabela to zmienna w PHP to wtedy możesz użyć funkcji join:

  1. $tab = Array(2,3,4,5);
  2. $sql = "SELECT * FROM Tabela WHERE ID=".join(' OR ID=', $tab);
attimo
Spróbowałem zrobić to tak:
  1. $zapytanie = "SELECT id,nazwa, opis, zdjecie, cena FROM Produktyelektronika WHERE id=" .join(' OR id=', $_SESSION['koszyk']);

niestety nie działa to poprawnie.
erix
Nie działa poprawnie, to znaczy? Wysadza klawiaturę?
altruista2
Napisz jakie wyskakują błędy (mysql_error()), i jak wygląda to zapytanie (echo $zapytanie)
attimo
Na szczęście nie.
  1. $polaczenie = mysql_connect('', '', '') or die("brak polaczenia: ".mysql_error());
  2. $baza = mysql_select_db('attimo_cba_pl',$polaczenie) or exit("nie wybrano bazy, blad". mysql_error());
  3. mysql_query("SET NAMES utf8");
  4. mysql_query("SET CHARACTER_SET utf8_polish_ci");
  5. $zapytanie = "SELECT id,nazwa, opis, zdjecie, cena FROM Produktyelektronika WHERE id=" .join(' OR id=', $_SESSION['koszyk']);
  6. $wynik = mysql_query($zapytanie, $polaczenie) or die(mysql_error());
  7. $rekord = mysql_fetch_assoc($wynik);
  8. echo $rekord['nazwa'];


Mam dwa elementy w tabeli po zapisaniu do zmiennej $_SESSION['koszyk'] wartosci 1 nie wyswietla sie zaden rekord ale gdy wartosc jest 2 to element pobiera sie prawidlowo.

kwestie dodania wartosci do tej tablicy rozwiazalem tak:
  1. function nowy()
  2.  
  3. {
  4. if ($_POST['Dodaj'])
  5. {
  6. $idd = $_POST['id'];
  7. $polaczenie = mysql_connect('', '', '') or die("brak polaczenia: ".mysql_error());
  8. $baza = mysql_select_db('attimo_cba_pl',$polaczenie) or exit("nie wybrano bazy, blad". mysql_error());
  9. mysql_query("SET NAMES utf8");
  10. mysql_query("SET CHARACTER_SET utf8_polish_ci");
  11. $zapytanie = "SELECT id,nazwa, opis, zdjecie, cena FROM Produktyelektronika WHERE id = $idd";
  12. $wynik = mysql_query($zapytanie, $polaczenie) or die(mysql_error());
  13. $rekord = mysql_fetch_assoc($wynik);
  14. if(!isset($_SESSION['koszyk'])){
  15. $_SESSION['koszyk'] = array();
  16. }
  17. array_push($_SESSION['koszyk'],$idd);
  18. }
  19. }


altruista2
Czyli wszystko ok? smile.gif

BTW. Możesz krócej:
  1. if(!isset($_SESSION['koszyk'])){
  2. $_SESSION['koszyk'] = array($idd);
  3. }


attimo
Gdy otwieram strone prawidłowo wyświetla się, że koszyk jest pusty by to sprawdzić napisałem taki kod:
  1. <?php
  2. nowy();
  3. if($_SESSION['koszyk']&&array_count_values($_SESSION['koszyk']))
  4. wyswietl_koszyk();
  5. else
  6. echo "Koszyk jest pusty.";
  7. ?>

W bazie są 3 rekordy czyli 3 id 1,2,3. Gdy zapisuje do zmiennej $_SESSION['koszyk'] jakąś wartość komunikat o tym, że koszyk jest pusty znika, ale powinien wyswietlic sie produkt ktory zostal dodany, ale tak nie jest, gdy wybieram produkt o id 2 jego nazwa sie pojawia w koszyku czyli zostal wybrany, to samo dzieje sie z 3 produktem natomiast gdy chce dodac pierwszy nic sie nie dzieje.

aktualny kod funkcji wyswietl_koszyk jest taki:
  1. <?php
  2. function wyswietl_koszyk($koszyk){
  3.  
  4. $polaczenie = mysql_connect('mysql.cba.pl', '', '') or die("brak polaczenia: ".mysql_error());
  5. $baza = mysql_select_db('attimo_cba_pl',$polaczenie) or exit("nie wybrano bazy, blad". mysql_error());
  6. mysql_query("SET NAMES utf8");
  7. mysql_query("SET CHARACTER_SET utf8_polish_ci");
  8. $zapytanie = "SELECT id,nazwa, opis, zdjecie, cena FROM Produktyelektronika WHERE id=" .join(' OR id=', $_SESSION['koszyk']);
  9. $wynik = mysql_query($zapytanie, $polaczenie) or die(mysql_error());
  10. $rekord = mysql_fetch_assoc($wynik);
  11. while($rekord = mysql_fetch_assoc($wynik))
  12. {
  13. echo $rekord['nazwa'];
  14. echo "<br />";
  15.  
  16. }
  17. }
  18. ?>
altruista2
dopisz po $zapytanie a przed $wynik
  1. echo $zapytanie;

to zobaczymy jak wygląda to zapytanie. I usuń ten błąd:
  1. $rekord = mysql_fetch_assoc($wynik);
  2. while($rekord = mysql_fetch_assoc($wynik))

powinno być samo
  1. while($rekord = mysql_fetch_assoc($wynik))


I trzy pytania z mojej strony:

Pierwsze: Po co w argumentach funkcji wyswietl_koszyk() jest zmienna $koszyk skoro jej nie używasz?
Drugie: Czemu się łączysz z bazą danych w funkcji?
Trzecie: Po co ci ta zmienna $polaczenie ?
attimo
Poprawiłem błąd i teraz działa poprawnie, dzięki wielkie smile.gif.
Ad.1 jakiś śmieć zapomniałem usunąć
Ad.2 Nie bardzo wiem jak to inaczej rozwiązać
Ad.3 Zawsze, gdy chce się połączyć z bazą używam tych wszystkich funkcji.

altruista2
Cytat
Ad.2 Nie bardzo wiem jak to inaczej rozwiązać

Łącz się na np. początku pliku całego 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.