2013-10-17 4 views
0

В настоящее время у меня есть 3 таблицы MySQL, одна из которых хранится с информацией о пользователях, одна с историей курса и последняя заполненная их историей вознаграждения.PHP MySQL Query

Я пытаюсь создать программу «награды», если вы это сделаете, используя эти две базы данных и скрипт PHP. Что касается требований к вознаграждению, у меня есть 2 настройки массивов для двух типов наград:

//Pen Reward with course A & B required 
$pen=array("a","b") 

//Cup Reward with course B & C required 
$cup=array("b","c") 

Я не могу понять, как первый запроса для всех идентификаторов пользователей, а затем пройти через их историю. Если они совпадают установить выше требования, то для обновления таблицы вознаграждения 1 (чтобы показать, что они получили награду)

UsersDB

userid name 
---------------- 
1   bill 
2   john 
3   steve 

HistoryDB

userid courseid 
------------------ 
1   a 
1   b 
2   b 
3   a 
3   c 

RewardHistoryDB

userid pen cup 
--------------------- 
1   0  0 
2   0  0 
3   0  0 

В идеале после запуска PHP скрипт, он будет обновлять RewardHistoryDB, чтобы отразить, что пользователь 1 получил перо, и пользователь 3 получил кубок. (БД будет выглядеть следующим образом :)

RewardHistoryDB (после того, как)

userid pen cup 
--------------------- 
1   1  0 
2   0  0 
3   0  1 

Вот PHP код, я использую прямо сейчас (не полный):

$userid=array(); 
$i=0; 

//Find All users 
$result = mysqli_query($con,"SELECT userid FROM usersdb") 
while ($row = mysqli_fetch_array($result)){ 
    $universityid[$i]=$row['universityid']; 
    $i++; 
} 

//Find History 
$courseid=array(); 
foreach ($userid as $userid1){ 
$result = mysqli_query($con,"SELECT courseid FROM historydb WHERE userid='".$userid1."'"); 
    while ($row = mysqli_fetch_array($result)){ 
     $courseid[]=$row; 
    } 
} 

//Update Reward DB 
//Don't even know where to start... 

Любая помощь будет значительно apprecia Тед. Если у вас есть вопросы, пожалуйста, дайте мне знать.

Благодарим вас за продвинутый!

+3

Так что же не работает? –

+0

Я могу запросить идентификаторы пользователя и историю в порядке, но я просто не знаю, как их комбинировать, расчесывать, чтобы проверить, соответствуют ли они требованиям (хранится в $ pen или $ cup) ... извините сообщение не было понятно , Я обновлю его –

+0

, есть ли причина, по которой вам нужно это делать в PHP, а не в SQL? –

ответ

0

http://sqlfiddle.com/#!2/1a96b/1/0

Вы можете сделать это так же, как и запросы, не делая никакой логики в PHP

update RewardHistoryDB 
    set Pen = 1 
    where UserID in ( 
     select UserID 
     from HistoryDB 
     where CourseID in ('A','B') 
     group by UserID 
     having count(UserID)=2); 


update RewardHistoryDB 
    set Cup = 1 
    where UserID in ( 
     select UserID 
     from HistoryDB 
     where CourseID in ('B','C') 
     group by UserID 
     having count(UserID)=2); 

Или вы даже можете сделать это в одном, большое заявление ...

update RewardHistoryDB 

     left outer join (
      select UserID as Pens_UserID 
      from HistoryDB 
      where CourseID in ('A','B') 
      group by UserID 
      having count(UserID)=2) as Pens 
     on RewardHistoryDB.UserID = Pens.Pens_UserID 

     left outer join (
      select UserID as Cups_UserID 
      from HistoryDB 
      where CourseID in ('B','C') 
      group by UserID 
      having count(UserID)=2) as Cups 
     on RewardHistoryDB.UserID = Cups.Cups_UserID 

set Pen = case when Pens.Pens_UserID is not null then 1 else 0 end, 
    Cup = case when Cups.Cups_UserID is not null then 1 else 0 end 
+0

, который отлично работает. Спасибо. я чувствую себя настолько тупым Я думал, что должен был сделать логику в PHP не понял, что SQL может справиться с этим еще раз спасибо! –

+0

SQL может делать тонны вещей ... –