2016-04-04 3 views
0

mysqlクエリに基づいてオープンチケットを持つユーザーを出力するwhileループがあります。私はまた、開いているチケットをすべて出力する別のwhileループを持っています。彼らはどちらも動作します。私はオープンチケットで各ユーザーをリストアップできるように、最初の2番目のwhileループを入れようとしました。私は「in_array()を使用していました。問題は、それが残りのための最初のユーザとチケットが、doesntのを出力していることである。whileループを別のwhileループで使用して特定のデータを出力する

$dbc = mysqli_connect('localhost', 'root', 'root', 'tickets2') or die('Error connecting to Mysql Server'); 

$query1 = " SELECT DISTINCT number, username, subject, o.name " . 
"FROM ost_ticket t, ost_staff s, ost_ticket__cdata d, ost_user u, ost_organization o " . 
"WHERE status_id = 1 AND t.staff_id=s.staff_id AND d.ticket_id=t.ticket_id AND u.id=t.user_id AND o.id=u.org_id " . 
"ORDER by username" ; 

$query2 = " SELECT DISTINCT username " . 
"FROM ost_ticket t, ost_staff s, ost_ticket__cdata d, ost_user u, ost_organization o " . 
"WHERE status_id = 1 AND t.staff_id=s.staff_id AND d.ticket_id=t.ticket_id AND u.id=t.user_id AND o.id=u.org_id " . 
"ORDER by username" ; 

$tickets = mysqli_query($dbc, $query1) or die ('Error'); 

$users = mysqli_query($dbc, $query2) or die ('Error'); 

while($row = mysqli_fetch_assoc($users)){ 
    print_r($row); 
    echo "<br />"; 
    $user = $row['username']; 
    while($row1 = mysqli_fetch_assoc($tickets)){ 
    if(in_array($user, $row1)){ 
    print_r($row1); 
    echo "<br />"; 
    } 
} 

} 

while($row1 = mysqli_fetch_assoc($tickets)){ 
print_r($row1); 
echo "<br />"; 
} 

これは私が最初にユーザーの出力は応じ

Array ([username] => aolusola) 
Array ([number] => 905495 [username] => aolusola [subject] => PAssword change Tool [name] => A Hotel) 
Array ([number] => 770279 [username] => aolusola [subject] => Laundry posting [name] => Bfish Hotel) 
Array ([number] => 972356 [username] => aolusola [subject] => New TC RVC 8 [name] => Inter Hotel) 
Array ([username] => cakaluka) 
Array ([username] => fmbah) 
Array ([username] => habel) 
Array ([username] => iadebanjo) 
Array ([username] => iakintade) 
Array ([username] => jajani) 
Array ([username] => jakinmosin) 
Array ([username] => jomaivboje) 
Array ([username] => logunleye) 
Array ([username] => oogundimu) 
Array ([username] => panawe) 
Array ([username] => solushola) 
Array ([username] => ugouvietesivwi) 

を取得し、出力されます残りはあまりないの計画、それに私は次のコードを試してみてください

+0

最初のコメントに最後のコメントを付けてもう一度お試しください。 –

+0

クエリの出力を個別に投稿することはできますか? – atefth

+0

内部whileループの最初の実行でCOMPLETE '$ tickets'結果セットを使用しています。したがって、2番目の外側の '$ users'ループの処理には何も残っていません。 – RiggsFolly

答えて

0

感謝をしないのです何を任意のアイデア:。

$users = mysqli_query($dbc, $query2) or die ('Error'); 

while($row = mysqli_fetch_assoc($users)){ 
    print_r($row); 
    echo "<br />"; 
    $user = $row['username']; 
$tickets = mysqli_query($dbc, $query1) or die ('Error'); 
    while($row1 = mysqli_fetch_assoc($tickets)){ 
    if(in_array($user, $row1)){ 
    print_r($row1); 
    echo "<br />"; 
    } 
} 

} 

mysqli_fetch_assocは前方のみであるため、whileループ内でクエリを実行します。したがって、ループが実行されるたびに実行する必要があります。 ORあなただけのこれだけで、現在のユーザーのためのチケットを入手することができます

$dbc = mysqli_connect('localhost', 'root', 'root', 'tickets2') or die('Error connecting to Mysql Server'); 

$query1 = " SELECT DISTINCT number, username, subject, o.name " . 
"FROM ost_ticket t, ost_staff s, ost_ticket__cdata d, ost_user u, ost_organization o " . 
"WHERE status_id = 1 AND t.staff_id=s.staff_id AND d.ticket_id=t.ticket_id AND u.id=t.user_id AND o.id=u.org_id " . 
"ORDER by username"; 

$query2 = " SELECT DISTINCT username " . 
"FROM ost_ticket t, ost_staff s, ost_ticket__cdata d, ost_user u, ost_organization o " . 
"WHERE status_id = 1 AND t.staff_id=s.staff_id AND d.ticket_id=t.ticket_id AND u.id=t.user_id AND o.id=u.org_id " . 
"ORDER by username"; 

$users = mysqli_query($dbc, $query2) or die ('Error'); 

while($row = mysqli_fetch_assoc($users)){ 
    print_r($row); 
    echo "<br />"; 
    $user = $row['username']; 
$query3 = " SELECT DISTINCT number, username, subject, o.name " . 
"FROM ost_ticket t, ost_staff s, ost_ticket__cdata d, ost_user u, ost_organization o " . 
"WHERE `user_name` = '{$user}' status_id = 1 AND t.staff_id=s.staff_id AND d.ticket_id=t.ticket_id AND u.id=t.user_id AND o.id=u.org_id " . 
"ORDER by username" ; 
$tickets = mysqli_query($dbc, $query1) or die ('Error'); 
    while($row1 = mysqli_fetch_assoc($tickets)){ 
    print_r($row1); 
    echo "<br />"; 
} 

} 

$tickets = mysqli_query($dbc, $query1) or die ('Error'); 
while($row1 = mysqli_fetch_assoc($tickets)){ 
print_r($row1); 
echo "<br />"; 
} 
+0

これをお勧めするならば、内側のクエリに 'username'を追加するだけで、関連する行だけを取得できるので、**ロット**の意味を持つことになります。次に、愚かな 'in_array'テストを取り除き、内部配列の実行ごとに不要な行を返さないでください – RiggsFolly

+0

@RiggsFolly Right – mega6382

0

非常に悪い習慣ですが、ループ内のDBからデータを選択します。行が多い場合は、コードが非常に遅くなります。 selectを1つだけ作成し、両方のテーブルからデータを取得する必要があります。 JOIN(http://www.w3schools.com/sql/sql_join.asp)を使用

関連する問題