Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Warunki z MySQL + sprawdzanie czy taki wynik jest w innej tabeli mysql.
Giluś
post
Post #1





Grupa: Zarejestrowani
Postów: 377
Pomógł: 9
Dołączył: 2.11.2010

Ostrzeżenie: (0%)
-----


Hej, chcę wyświetlić jedynie te rekordy z bazy danych które odpowiadają moim warunkom, czyli podstawowe (czyli do ostatniego AND) działają jak należy, lecz chciałem troszkę urozmaicić..

Czyli stworzyłem sobie kolejną tabelę "Innowacja" o zawartości (ID | id_i | id_u)
Gdzie:
id_i - ID pobierane z tabeli: innowacje_levels.
id_u - ID użytkownika zalogowanego.

I teraz chciałbym wyświetlić z tabeli innowacje_levels wszystkie rekordy spełniające warunki (te podstawowe) oraz jeden główny warunek, czyli czy ta "Innowacja" już nie została uruchomiona, jeśli została, to pomijamy..

Może troszkę chaotycznie piszę, ale jeśli została uruchomiona, to jest dodawany rekord do tabeli "innowacje" z id_i - numerem id innowacji, oraz id_u - numer id usera

  1. SELECT * FROM innowacje_levels
  2. WHERE
  3. `cena` <= '".$users['money']."' AND
  4. `fabryka_lvl` <= '".$users['fabryka']."' AND
  5. `symulator_lvl` <= '".$users['symulator']."' AND
  6. `ps_lvl` <= '".$users['ps']."' AND
  7. `ts_lvl` <= '".$users['ts']."' AND
  8. `zaw_lvl` <= '".$users['za']."' AND
  9. `pod_lvl` <= '".$users['po']."' AND
  10. `dyf_lvl` <= '".$users['dy']."' AND
  11. `ham_lvl` <= '".$users['ha']."' AND
  12. `skr_lvl` <= '".$users['sb']."' AND
  13. `mech_lvl` <= '".$users['mechanik']."' AND
  14. `inz_lvl` <= '".$users['inzynierowie']."' AND
  15. `sektech_lvl` <= '".$users['sektech']."' AND
  16. `sekaero_lvl` <= '".$users['sekae']."' AND
  17. `seksil_lvl` <= '".$users['seksil']."'
  18.  
  19. AND
  20.  
  21. `id` != (SELECT `id_i`, `id_u` FROM `innowacje` WHERE `id_u` = '".$users['id']."' LIMIT 1)

Zrobiłem coś takiego no i ten ostatni kod:

  1. AND
  2.  
  3. `id` != (SELECT `id_i`, `id_u` FROM `innowacje` WHERE `id_u` = '".$users['id']."' LIMIT 1)


Niezbyt dobrze śmiga, nawet troszkę rozumiem dlaczego, lecz nie mogę znaleźć rozwiązania, wypadało by dać drugi warunek "id_i", ale nie wiem.., myślałem nawet aby policzyć wyniki z innowacji (SELECT COUNT(*) FROM table) ale nie wiem jak to zbytnio zaczepić do warunku w 1 zapytaniu..

Może macie jakieś rozwiązania ?

Edit:
Puki co mam taki błąd;
Kod
Operand should contain 1 column(s)


Pozdrawiam i z góry dziękuje za pomoc (IMG:style_emoticons/default/smile.gif)

Ten post edytował Giluś 28.08.2014, 14:11:23
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Giluś
post
Post #2





Grupa: Zarejestrowani
Postów: 377
Pomógł: 9
Dołączył: 2.11.2010

Ostrzeżenie: (0%)
-----


Dzięki za odpowiedź (IMG:style_emoticons/default/smile.gif)

Mam nadzieję, że rozumiesz do czego dążę ?

Teraz błąd jest taki, jak wywalę LIMIT 1, to wraca do poprzedniego.
Kod
This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'


I raczej to nie jest chyba wina wersji..
Serwer: Localhost via UNIX socket
Typ serwera: MySQL
Server version: 5.5.37 - MySQL Community Server (GPL)
Wersja protokołu: 10

Pozdrawiam (IMG:style_emoticons/default/smile.gif)

Edit:
Takie rozwiązanie działa:
  1. <?php
  2. $i = 1;
  3. $innowacje = mysql_query("
  4. SELECT * FROM innowacje_levels
  5. WHERE
  6. `cena` <= '".$users['money']."' AND
  7. `fabryka_lvl` <= '".$users['fabryka']."' AND
  8. `symulator_lvl` <= '".$users['symulator']."' AND
  9. `ps_lvl` <= '".$users['ps']."' AND
  10. `ts_lvl` <= '".$users['ts']."' AND
  11. `zaw_lvl` <= '".$users['za']."' AND
  12. `pod_lvl` <= '".$users['po']."' AND
  13. `dyf_lvl` <= '".$users['dy']."' AND
  14. `ham_lvl` <= '".$users['ha']."' AND
  15. `skr_lvl` <= '".$users['sb']."' AND
  16. `mech_lvl` <= '".$users['mechanik']."' AND
  17. `inz_lvl` <= '".$users['inzynierowie']."' AND
  18. `sektech_lvl` <= '".$users['sektech']."' AND
  19. `sekaero_lvl` <= '".$users['sekae']."' AND
  20. `seksil_lvl` <= '".$users['seksil']."'
  21. ") or die(mysql_error());
  22.  
  23. if(mysql_num_rows($innowacje) > 0) {
  24. while($inno_row = mysql_fetch_assoc($innowacje)) {
  25.  
  26. $inno_jest = mysql_fetch_array(mysql_query("SELECT id_u, id_i FROM `innowacje` WHERE `id_u` = '".$users['id']."' and `id_i` = '".$inno_row['id']."' LIMIT 1"));
  27.  
  28. if($inno_jest == FALSE) {
  29. echo $i.' - '.$inno_row['nazwa'].' <br />';
  30. $i++;
  31. }
  32. }
  33. }
  34. ?>


A ja po prostu chciałem w jednym zapytaniu "$innowacje" zrobić wszystko, zamiast później do każdego wyniku w pętli robić kolejne zapytanie "$inno_jest" i później warunek..
Fakt w tej bazie jest tylko 31 wartości, wiec jakoś bardzo serwer w tym przypadku nie ucierpi, ale chciałbym na przyszłość wiedzieć jak to inaczej rozwiązać (IMG:style_emoticons/default/smile.gif)

Ten post edytował Giluś 28.08.2014, 15:20:58
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 3.10.2025 - 03:23