Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skomplikwoane zapytanie
Forum PHP.pl > Forum > Bazy danych > MySQL
Bojakki
Mam spory klopot z zapytaniem. Otoz mam tabele z 4 kolumnami [id, name1, name2, name3]. Minimum jedno pole name nie jest puste, z tym, ze jak np. jest 1 uzupelnione to niekniecznie musi byc to pole 'name1', rownie dobrze moga byc inne, a to nie.

I teraz chialem przeszukac te 3 pola w poszukiwaniu wyrazu na litere 'x', gdzie x to dowolna litera z alfabetu. Caly szkopul tkwi w tym, ze jezeli uzupelnione jest pole 'name1' to zeby bralo pod uwage tylko to pole, a pzostale 2 nie, jezeli 'name1' nie jest uzupelnione to zeby bralo pod uwage 'name2', a jezeli 'name1' i 'name2' nie jest uzupelnione to zeby bralo pod uwage 'name3', a pzosotale pola nie.

Nie wiem czy sie da w ogole cos takiego napisac, a czy jednym zapytaniem to w ogole juz watpie:/

Wiem jedynie jak wyswietlic prawidlowe pole (czyli to, ktore powinno byc przeszukiwane), ale jak to polaczyc z wyszukiwaniem to juz nie.
  1. <?php
  2. if($name1!= "")
  3. echo $name1;
  4. if($name1 == "" && $name2 != "")
  5. echo $name2;
  6. if($name1 == "" && $name2 == "" && $name3 != "")
  7. echo $name3;
  8.  
  9. ?>


moze ktos pomoc? Z gory dziekuje za wszelka pomoc.
nospor
troche zakrecone zapytanie nasmazylem, ale dziala, przynajmniej u mnie. pewnie mozna prosciej, ale akurat nie mam czasu pomyslec bardziej smile.gif
Przyjalem ze pola nie wypelnione maja wartosc NULL
  1. SELECT *
  2. FROM tabela WHERE IF(name1 IS NOT NULL,name1 LIKE 'x%',false) OR IF(name1 IS NULL AND name2 IS NOT NULL,name2 LIKE 'x%',false) OR IF(name1 IS NULL AND name2 IS NULL AND name3 IS NOT NULL,name3 LIKE 'x%',false)
Bojakki
Przerobilem to na swoje potrzeby i wyswietla mi sie blad:
  1. <?php
  2.  
  3. $index = mysql_query("select * from gb_catalog where
  4. if (pol is not '', pol like '".strtoupper($litera)."%' ,false) or
  5. if (pol is '' and eng is not '', eng like '".strtoupper($litera)."%' ,false)
  6. if (pol is '' and eng is '' and orig is not '', orig like '".strtoupper($litera)."%' ,false)");
  7.  
  8. while($row = mysql_fetch_row($index)) //tego sie czepia
  9. {
  10. if ($row[4] == $plat_name)
  11. echo '$row[0]';
  12. }
  13.  
  14. ?>


Cytat
Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in /home/gb/public_html/index.php on line 69
nospor
kiepsko przerabiales. zjadles jednego ora miedzy 2 a 3 ifem smile.gif
pozatym nie is '' a = ''
is stosuje sie do null
Bojakki
Cytat(nospor @ 2006-01-03 13:55:45)
kiepsko przerabiales. zjadles jednego ora miedzy 2 a 3 ifem smile.gif
pozatym nie is '' a = ''
is stosuje sie do null

Dzieki, dziala mi to swietnie:)

Mam tylko problem z posegregowaniem wynikow tak by byly alfabetycznie, bo jak posegreguje je wg. jakiejs kolumny w tabelii to niestety dobrego efektu nie otrzymam:/
nospor
  1. SELECT *, IF(name1 IS NOT NULL, name1, IF(name2 IS NOT NULL, name2,name3)) kol
  2. FROM tabela WHERE IF(name1 IS NOT NULL,name1 LIKE 'x%',false) OR IF(name1 IS NULL AND name2 IS NOT NULL,name2 LIKE 'x%',false) OR IF(name1 IS NULL AND name2 IS NULL AND name3 IS NOT NULL,name3 LIKE 'x%',false) ORDER BY kol
No i se dostosuj do siebie 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.