Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Warunki z MySQL + sprawdzanie czy taki wynik jest w innej tabeli mysql.
Forum PHP.pl > Forum > Przedszkole
Giluś
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 smile.gif
Damonsson
  1. `id` NOT IN (SELECT `id_i`, `id_u` FROM `innowacje` WHERE `id_u` = '".$users['id']."' LIMIT 1)

Nie analizowałem czy dobrze robisz, to zapobiegnie błędowi "Operand should contain 1 column(s)"
Giluś
Dzięki za odpowiedź 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 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ć 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.