Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak dopisywać zmienną do zapytania w zależności od wyniku z bazy mysql.
Forum PHP.pl > Forum > PHP
casperii
Witam, mam następujący problem i nie wiem jak sobie z nim poradzić, ale tworzyć tysiące pętli które by były możliwe to bezsens.

Sprawdzam sobie oraz wstawiam w pętlę IF wartość:

  1. if($row['numer1']=='1{
  2. $nr1 = "AND `numer`='numer1' ";
  3. }
  4.  
  5. if($row['numer2']=='1{
  6. $nr2 = "OR `numer`='numer2' ";
  7. }
  8.  
  9. if($row['numer3']=='1{
  10. $nr3 = "OR `numer`='numer3' ";
  11. }
  12.  
  13. if($row['numer4']=='1{
  14. $nr4 = "OR `numer`='numer4' ";
  15. }
  16.  
  17. if($row['numer5']=='1{
  18. $nr5 = "OR `numer`='numer5' ";
  19. }
  20.  
  21. if($row['numer6']=='1{
  22. $nr6 = "OR `numer`='numer6' ";
  23. }


Jak można się domyśleć sprawdzam czy $numer ma wartość w bazie "1" jeżeli ma tworzę zmienną "$nr"1-6, następnie tą zmienną wkładam do kolejnego zapytania:

  1. $sql = mysql_query("SELECT * FROM `test` WHERE `name` = '".$nazwa."' ".$nr1." ".$nr2." ".$nr3." ".$nr4." ".$nr5." ".$nr6." GROUP BY `nazwa` ORDER BY `nazwa` ASC");


Problem jest wtedy gdy istnieje "1" dla 2 albo 3 lub 4 zmiennych $nr.. Przecież nie będę tworzyć tyle ifów. Dlatego piszę tu na forum, czy istnieje jakieś rozwiązanie jak to zrobić ? smile.gif
markuz
  1. $where = '';
  2. for($i = 1; $i < 7; $i++)
  3. if($row['numer'.$i] == '1')
  4. $where .= ' OR `numer` = "numer'.$i.'"';

coś takiego?
fklar
Jeszcze można tak:

  1. $cond = array();
  2. foreach($row as $key => $val) {
  3. if($val == 1) $cond[] = $key;
  4. }


i warunek SQL:

  1. WHERE `name` IN (".implode(',', $cond).")


Ale pewnie da się to zrobić dużo łatwiej - nie podałeś zapytania, którym pobierasz te rekordy, które wstawiasz do warunków.
Pyton_000
a nie możesz zrobić tego przez LEFT JOIN i pozbyć się kodu PHP?

Czy zapytanie którym wyciągasz rowx jeszcze ma jakieś inne zadanie?
Czy obie tabele są w jakikolwiek sposób ze sobą powiązane?
Pokaż to zapytanie.
casperii
super, ale co jeśli będzie tylko 1 warunek spełniony? To wtedy nie może być "OR" tylko "AND" w zapytaniu.

Zapytanie pierwsze gdzie pobieram nazwę użytkownika:

  1. $sql="SELECT * FROM `users` WHERE `nazwa` = '".$nazwa."' LIMIT 1";
  2. $res=mysql_query($sql);
  3. $row=mysql_fetch_array($res,MYSQL_ASSOC);


drugie zapytanie:

  1. $sql = mysql_query("SELECT * FROM `test` WHERE `name` = '".$nazwa."' ".$nr1." ".$nr2." ".$nr3." ".$nr4." ".$nr5." ".$nr6." GROUP BY `nazwa` ORDER BY `nazwa` ASC");

lub po zmianie

  1. $sql = mysql_query("SELECT * FROM `test` WHERE `name` = '".$nazwa."' ".$where." GROUP BY `nazwa` ORDER BY `nazwa` ASC");
Pyton_000
To co napisałeś i tak Ci zwróci wynik typu:

Jeśli użytkownik nazywa się 'Adam" Oraz nr=1
W przeciwnym wypadku jeśli któryś z nr. = 1 (ale już nie koniecznie Adam)
casperii
Ja rozumiem, ale potrzebuje też te zmienne umieścić do kolejnego zapytania:

  1. if(isset($zmiennaZselect)){
  2. $szukam =' WHERE `nazwa` = "'.$zmiennaZselect.'"';
  3. }else{
  4. $szukam = ' WHERE `nazwa`!="" '.$where.' ';
  5.  
  6. }


i tu dla tego muszę mieć "AND" dla tylko 1 spełnionego warunku dla $nr

  1. $szukam = ' WHERE `nazwa`!="" '.$where.' ';


Czyli chcę wyświetlić wszystkie rekordy o nie podanej nazwie a także te numery które do tej nazwy przynależą , mógłbym co prawda usunąć z zapytania `nazwa`!="" ale wtedy WHERE OR jest niepoprawną składnią zapytania mySQL.
Pyton_000
Weź pokaż kod cały kod z którym masz problem do walisz jakieś wyrywki które sie kupy nie trzymają.
I wyjaśnij co i jak i gdzie i po co chcesz to zrobić.
casperii
Nie ma sensu wstawiać wszystkich plików oraz całego kodu źródłowego. Oto najważniejsze
index.php

  1. if(zalogowany()){
  2.  
  3. $nazwa = $_SESSION['nazwa'];
  4. $sql="SELECT * FROM `users` WHERE `name` = '".$nazwa."' LIMIT 1";
  5. $res=mysql_query($sql);
  6. $row=mysql_fetch_array($res,MYSQL_ASSOC);
  7. $access=$row['access'];
  8.  
  9. if($access =='m'){
  10.  
  11. $where = '';
  12. for($i = 1; $i < 7; $i++)
  13. if($row['numer'.$i] == '1'){
  14. $where .= ' OR `numer` = "numer'.$i.'"';
  15. }
  16.  
  17.  
  18. }
  19. }


Po zalogowaniu się otrzymujemy w sesji nazwę (czyli login) , potem przypisujemy jakie uprawnienia ma dany login (nazwa) oraz do jakiego numeru należy. Jeżeli dana nazwa (login) ma uprawnienia "m" rozpoczynamy pętle for.

drugi plik php:

  1. if(isset($zmiennaZselect)){
  2. $szukam =' WHERE `nazwa` = "'.$zmiennaZselect.'"';
  3. }else{
  4. $szukam = ' WHERE `nazwa`!="" '.$where.' ';
  5.  
  6. }
  7.  
  8. $sql = "SELECT * FROM `test` $szukam ";
  9. $res = mysql_query($sql) or die(mysql_error());
  10. if(mysql_num_rows($res)>0){
  11. while($row = mysql_fetch_assoc($res)){
  12. echo ''.$row['nazwa'].'';
  13. }
  14. }


W drugim pliku mam select z którego wybieram nazwę , jeżeli nie wybiorę wyświetli mi wszystko co jest różne od pustego wiersza nazwa !=''
Jeżeli wybiorę jakąś nazwę z selecta tworzy się zapytanie nazwa = "'.$zmiennaZselect.'"' oraz do jakiego numeru należy, dlatego pierwszy z for powinno być AND numer1 a kolejny jeśli istnieje OR.
Czyli jeśli dana nazwa (login) przynależy do numer1="1" oraz numer="2" to powinno być nazwa="coś z selecta" AND numer1="1" OR numer2="1".
Jeżeli dana nazwa (login) przynależy tylko do np numer3="1" to powinno być tylko nazwa="coś z selecta" AND numer3="1"
Myślę że teraz jasno się wyraziłem o co mi chodzi :-)
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.