Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL]Zapytanie trudne do opisania
bmL
post
Post #1





Grupa: Zarejestrowani
Postów: 301
Pomógł: 25
Dołączył: 15.07.2007
Skąd: Olsztyn

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


Witam, mam mały problem z zapytaniem. Chciałbym to wykonać w jednym zapytaniu, myślę że jest to możliwe ale nie mogę wpaść na pomysł jak skonstruować takie zapytanie musiał bym chyba od deski do deski przestudiować cały manual (IMG:style_emoticons/default/smile.gif) Mam problem z negacją, może ktoś jest mi w stanie pomóc.

tabela users:
value : INT
userID : INT

tabela user_bets:
uUserID : INT
uBetID : INT

tabela bets:
betID : INT
betStatus : INT

Ciężko to opisać to napiszę w 3 zapytaniach i chciałbym wiedzieć czy istnieje możliwośc połączenia tego w jedno zapytanie:
  1. $under50 = mysql_query("SELECT userID AS uID FROM users WHERE value < 2");
  2.  
  3. while(@extract(mysql_fetch_array($under50, MYSQL_ASSOC)))
  4. {
  5. if(!mysql_num_rows(mysql_query("SELECT betID FROM bets, user_bets WHERE uUserID = '$uID' AND uBetID = betID AND betStatus <3 ")))
  6. {
  7. mysql_query("UPDATE user SET zl = 50 WHERE userID = '$uID'");
  8. }
  9. }


Z góry dzięki za pomoc (IMG:style_emoticons/default/smile.gif)

Ten post edytował bmL 26.09.2009, 16:36:53
Go to the top of the page
+Quote Post
skowron-line
post
Post #2





Grupa: Zarejestrowani
Postów: 4 340
Pomógł: 542
Dołączył: 15.01.2006
Skąd: Olsztyn/Warszawa

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


  1. SELECT users.userID, betID
  2. FROM users, user_bets, bets
  3. WHERE users.userID = user_bets.uUserID
  4. AND users.value < 2
  5. AND bets.betStatus < 3

i pozniej update

lub odrazu
  1. UPDATE user SET zl = 50 WHERE userID IN ( ... )

zamiast 3 kropek zapytanie select
Go to the top of the page
+Quote Post
bmL
post
Post #3





Grupa: Zarejestrowani
Postów: 301
Pomógł: 25
Dołączył: 15.07.2007
Skąd: Olsztyn

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


  1. UPDATE user SET zl = 50 WHERE userID NOT IN (SELECT userID FROM bets_user, user, bets
  2. WHERE uBetUserID = userID
  3. AND zl < 2
  4. AND betStatus < 3)

Zamiast IN dałem NOT IN bo chodzi o to że ma nie występować ale tak czy siak wypluwa błąd:
Kod
You can't specify target table 'user' for update in FROM clause


Puki co kombinuję (IMG:style_emoticons/default/winksmiley.jpg)

Przeanalizowałem i ogólnie źle zinterpretowałeś moją ideę bo takie zapytanie gdyby działało to zakłada że aktualizacja ma nastąpić we wszystkich rekordach dla których występuje betStatus < 3 a ma być odwrotnie mają nie występować rekordy z bestatus < 3;

Ten post edytował bmL 26.09.2009, 23:36:56
Go to the top of the page
+Quote Post

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 - 02:08