Goeden dag,

ik probeer een output te genereren op basis van gegevens vanuit de database.
op zich gaat mij dit redelijk af.
Ik loop alleen tegen het volgende aan

ik werk met 2 tabellen.
links komen de users te staan met 2 andere gegevens.
En aan de rechter kant komen x aantal runs met datum te staan.

Voorbeeld


Als ik nu de rechter kant met gegevens vul dan klopt het niet meer.


Dit is wat ik gebruik. P.s het ziet er nu niet mooi uit. Opmaak wordt aangewerkt waneer ik dit werkend heb.

<?php
				$query = $db->query('
					SELECT 
						SUM(gold_sended) AS gold_sended1,
						gold_swap_id,
						gold_sended,
						user_id,
						week,
						google_users.oauth_uid,
						google_users.portal_name,
						gold_swap_value.id,
						gold_swap_value.gold_swap_value
					FROM
						gold_sended,
						google_users,
						gold_swap_value
					WHERE
						(gold_swap_id = "'.$db->real_escape_string($_GET['a']).'")
					AND
						(week = "'.$week.'")
					AND
						(gold_swap_id = gold_swap_value.id)
					AND
						(gold_sended.user_id = google_users.oauth_uid) GROUP BY google_users.portal_name');
						$i = 0;
						?>
<div class="block">
        <div class="block-bot">
          <div class="head">
            <div class="head-cnt">
              <h3>User Swap Values:</h3>
              <div class="cl">&nbsp;</div>
            </div>
          </div>
          <div class="row-articles articles">
            <div class="cl">&nbsp;</div>
			
			<div class="article">
              <div class="cl">&nbsp;</div>
				<!-- Content HERE-->
				<div style="width:650px; overflow: hidden;">
					<div style="width:620px; background-color:#000; float:left; overflow:auto;">
					<table width="100%" border="1" style="border-collapse: collapse; ">
					<tr>
						<td>
							<table width="50%" border="1" style="border-collapse: collapse; ">
							<tr>
								<td>Name:</td>
								<td>Remaining:</td>
								<td>Total:</td>
							</tr>
							<?php
							$i = 1;
							while($res = $query->fetch_assoc())
							{
								echo '<tr>
								<td>'.$res['portal_name'].'</td>
								<td>'.number_format($res['gold_swap_value'] - $res['gold_sended1']).'</td>
								<td>'.number_format($res['gold_sended1']).'</td>';
								$i++;
								$account = $res['oauth_uid'];
							}
							?>
							</tr>
							</table>
						</td>
						<td>&nbsp;</td>
						<td>
							<table width="100%" border="1" style="border-collapse: collapse; ">
							<tr>
							<?php
							for($i = 1; $i < 50; $i++)
							{
								echo '<td>Run '.$i.':</td><td>Date</td>';
							}
							?>
							</tr>
							<tr>
							<?php
							$query1 = $db->query('
							SELECT 
								gold_sended,
								gold_swap_id,
								user_id,
								week,
								date,
								google_users.oauth_uid,
								google_users.portal_name
							FROM
								gold_sended,
								google_users
							WHERE
								(gold_swap_id = "'.$db->real_escape_string($_GET['a']).'")
							AND
								(week = "'.$week.'")
							AND
								(google_users.oauth_uid = "'.$account.'")');
							while($res1 = $query1->fetch_assoc())
							{
								echo '<td>'.$res1['gold_sended'].'</td><td>'.$res1['date'].'</td>';
								//echo '<td>Test</td><td>Datum</td>';
							}
							?>
					
							</tr>
							</table>
						</td>
					</tr>
					</table>
					</div>
				</div>
            </div>

            <div class="article last-article">
              <div class="cl">&nbsp;</div>
              
              <div class="cl">&nbsp;</div>
            </div>
            <div class="cl">&nbsp;</div>
          </div>
        </div>
      </div>


Het moet dus als volgt gebeuren.
Linker tabel zoals hierboven staat. Komen dus username remaining en totaal verstuurd goud te staan.
Rechter tabel moet dus de gegevens bevatten van elke user in een andere rij.
Nu stopt die alle runs van alle users in 1 rij.
laatste voorbeeld geeft aan dat user imagination 4 runs heeft met de waardes. Echter die laatste waarde is van de user test.

Ik kom er helaas even niet meer uit.
Elke tip is welkom.

Met vriendelijke groet,

Thomas de Vries.
Tabellen in tabellen is een behoorlijke crime waarbij je terug lijkt te denken aan vroeger. Waarom niet met divjes, floats en clear's de boel indelen?
Hoi Ariën ja dat is idd iets van vroeger uit.

Ja ik kan het wel idd met divjes etc doen. wordt het wel wat overzichtelijker.
Ik zal het eerst overzichtelijker maken.
Moet die </tr> van regel 64 niet binnen de while-loop vallen? Je maakt nu een heleboel <tr>'s aan, maar sluit er slechts 1 af...
dit is hoe ik het nu heb.

<?php
				$query = $db->query('
					SELECT 
						SUM(gold_sended) AS gold_sended1,
						gold_swap_id,
						gold_sended,
						user_id,
						week,
						google_users.oauth_uid,
						google_users.portal_name,
						gold_swap_value.id,
						gold_swap_value.gold_swap_value
					FROM
						gold_sended,
						google_users,
						gold_swap_value
					WHERE
						(gold_swap_id = "'.$db->real_escape_string($_GET['a']).'")
					AND
						(week = "'.$week.'")
					AND
						(gold_swap_id = gold_swap_value.id)
					AND
						(gold_sended.user_id = google_users.oauth_uid) GROUP BY google_users.portal_name');
						$i = 0;
						?>
<div class="block">
        <div class="block-bot">
          <div class="head">
            <div class="head-cnt">
              <h3>User Swap Values:</h3>
              <div class="cl">&nbsp;</div>
            </div>
          </div>
          <div class="row-articles articles">
            <div class="cl">&nbsp;</div>
			
			<div class="article">
              <div class="cl">&nbsp;</div>
				<!-- Content HERE-->
				<div style="width:640px; overflow: hidden; background-color:;">
					<div class="users_data" style="width:300px; background-color:#000; float:left; ">
						<?php
						$query = $db->query('SELECT
							user_id,
							gold_swap_id,
							gold_swap_value.id,
							gold_swap_value.gold_swap_value,
							google_users.oauth_uid,
							google_users.portal_name
						FROM
							register_gold_swap,
							gold_swap_value,
							google_users
						WHERE
							gold_swap_id = "'.$db->real_escape_string($_GET['a']).'"
						AND
							(gold_swap_value.id = gold_swap_id)
						AND
							(user_id = google_users.oauth_uid)
							ORDER BY google_users.portal_name ASC
						');
						$count_rows = $query->num_rows;
						?>
						<table width="100%" border="1">
						<tr>
							<td>Name:</td>
							<td>Remaining:</td>
							<td>Total:</td>
						</tr>
						<?php
						while($res = $query->fetch_assoc())
						{
							$goldQuery = $db->query('
							SELECT 
								SUM(gold_sended) AS total_gold, 
								user_id, 
								gold_swap_id,
								gold_swap_value.id,
								gold_swap_value.gold_swap_value
							FROM 
								gold_sended,
								gold_swap_value
							WHERE 
								user_id = "'.$res['oauth_uid'].'" 
							AND 
								(gold_swap_id = gold_swap_value.id)
							AND
								(gold_swap_id = "'.$res['gold_swap_id'].'")');
							$gold = $goldQuery->fetch_assoc();
							$calcRemaining = $res['gold_swap_value'] - $gold['total_gold'];
							if($calcRemaining == $res['gold_swap_value']) {
								$remaining = '<td bgcolor="red"><font color="black">'.number_format($res['gold_swap_value']).'<font></td>';
							} else {
								$remaining = '<td bgcolor="orange"><font color="black">'.number_format($calcRemaining).'</font></td>';
							}
							echo '
							<tr>
								<td>'.$res['portal_name'].'</td>
								'.$remaining.'
								<td>'.number_format($gold['total_gold']).'</td>';
						}
						?>
						</tr>
						</table>
					</div>
					
					<div class="users_content" style="width:320px; float:right; background-color:#3e3e3e; overflow:auto;">
						<table width="100%" border="1" style="table-layout:fixed;">
						<tr>
						<?php
						for($i = 1; $i < 50; $i++)
						{
							echo '
								<td width="100px">Run '.$i.':</td>
								<td width="100px">Date</td>';
								
						}
						?>
						</tr>
						<tr>
						<?php
						$query_a = $db->query('SELECT
							user_id,
							gold_swap_id,
							gold_sended,
							date,
							gold_swap_value.id,
							gold_swap_value.gold_swap_value,
							google_users.oauth_uid,
							google_users.portal_name
						FROM
							gold_sended,
							gold_swap_value,
							google_users
						WHERE
							gold_swap_id = "'.$db->real_escape_string($_GET['a']).'"
						AND
							(gold_swap_value.id = gold_swap_id)
						AND
							(user_id = google_users.oauth_uid)
							ORDER BY google_users.portal_name ASC
						');
							while($res_a = $query_a->fetch_assoc())
							{
							echo '
								<td>'.$res_a['gold_sended'].'</td>
								<td>'.$res_a['date'].'</td>';
							}
							?>
						</tr>
						</table>
					</div>
					<div style="clear:both;"></div>
				</div>
            </div>

            <div class="article last-article">
              <div class="cl">&nbsp;</div>
              
              <div class="cl">&nbsp;</div>
            </div>
            <div class="cl">&nbsp;</div>
          </div>
        </div>
      </div>


Echter geeft die nog steeds dit

Kan je de output even in een JSfiddle zetten? Dan is het wat makkelijker te debuggen.
In je rechtertabel maak je maar 1 <tr> met resultaten aan. Niet verwonderlijk dat alles dan op dezelfde regel komt. ;-)

Je zou binnen de while-loop van regel 144 kunnen controleren of de portal_name is gewijzigd ten opzichte van de vorige waarde. Zo ja, dan begin je een nieuwe <tr>.
Hoi Willem,

Ja ik had al een aantal dingen geprobeerd maar lijkt erop dat of ik denk te moeilijk of er is iets anders.

ik heb dus 2 tables

gold_sended
user_id | gold_swap_id | gold_sended | date

google_users
oauth_uid | portal_name

gold_sended heeft data als
user_id = 1
gold_swap_id = 1
gold_sended = 1000000
date = datum.

user_id = 1
gold_swap_id = 1
gold_sended = 1500000
date = datum

user_id = 2
gold_swap_id = 2
gold_sended = 10000
date = datum

google_users
oauth_uid = 1
portal_name = test

oauth_uid = 2
portal_name = test2


in de linker table komen dus de gegevens te staan van de users met het totaal verzonden en wat ze nog dienen te verzenden.

Dit gebeurt doormiddel van group by portal_name anders komen die namen er 2 keer te staan.

in de rechter tabel moeten dus de gegevens komen van de user die ook in de linker tabel staan.

dus even een ruwe schets.


Zoals jullie zien kan het dus zijn dat user 1 meer gold heeft verstuurd dan user 2.
etc.
Ik denk dat je hier met alle geweld twee verschillende typen informatie wilt combineren: een soort van samenvatting en een bijbehorende gedetailleerde beschrijving.

Als je deze nu eens opsplitst (op wat voor manier dan ook)? Je zou in eerste instantie alleen de linker tabel kunnen laten zien, en dan op een details-link kunnen klikken waarna je of naar een aparte pagina gaat, of dat er een soort van verborgen div uitklapt met een lijstje van "runs" hierin, desnoods on-the-fly opgehaald met een AJAX-call (of wat dan ook, gebruik je verbeelding :p).

Ook is het meestal zo dat een layout verticaal makkelijker uitbreidbaar is dan horizontaal dus ik zou die runs hoe dan ook onder elkaar zetten, en niet naast elkaar.
Hoi Thomas,
Ja dit dient idd zo te gaan ivm we nu werken met google sheets. De owner wil dit graag zo zien.
Ik kan natuurlijk 1 tabel maken alleen het eerste gedeelte moet dan fixed zijn. en het 2de gedeelte scrollbaar.
Echter werkt dit niet.

Dus dien ik het zo te doen.

Nu heb ik bijna de oplossing gevonden.
code zoals die nu is

<div style="width:640px; overflow: hidden; background-color:;">
					<div class="users_data" style="width:300px; background-color:#000; float:left; ">
						<?php
						$query = $db->query('SELECT *, 
							SUM(gold_sended) as total_gold 
						FROM 
							gold_sended 
						INNER JOIN 
							google_users ON (gold_sended.user_id = google_users.oauth_uid) 
						INNER JOIN
							gold_swap_value ON (gold_sended.gold_swap_id = gold_swap_value.id)
						WHERE 
							gold_sended.week = "29" 
						AND 
							(gold_sended.gold_swap_id = "'.$db->real_escape_string($_GET['a']).'") 
						GROUP BY 
							user_id 
						ORDER BY 
							google_users.portal_name ASC'); 
						?>
						<table width="100%" border="1">
						<tr>
							<td>Name:</td>
							<td>Remaining:</td>
							<td>Total:</td>
						</tr>
						<?php
						while($res = $query->fetch_assoc())
						{
							$calcRemaining = $res['gold_swap_value'] - $res['total_gold'];
							if($calcRemaining == $res['gold_swap_value']) {
								$remaining = '<td bgcolor="red"><font color="black">'.number_format($res['gold_swap_value']).'<font></td>';
							} else {
								$remaining = '<td bgcolor="orange"><font color="black">'.number_format($calcRemaining).'</font></td>';
							}
							echo '
							<tr>
								<td>'.$res['portal_name'].'</td>
								'.$remaining.'
								<td>'.$res['total_gold'].'</td>';
								$account[] = $res['portal_name'];
						}
						?>
						</tr>
						</table>
					</div>
					<div class="users_content" style="width:320px; float:right; background-color:#3e3e3e; overflow:auto;">
					<table width="100%" border="1" style="table-layout:fixed;">
						<tr>
						<?php
						for($i = 1; $i < 50; $i++)
						{
							echo '
								<td width="100px">Run '.$i.':</td>
								<td width="100px">Date</td>';
								
						}
						?>
						</tr>
						<tr>
						<?php
						$query1 = $db->query('
						SELECT * FROM gold_sended, google_users WHERE gold_sended.user_id = google_users.oauth_uid AND (week = "29") AND (gold_sended.gold_swap_id = "1") ORDER BY google_users.portal_name ASC'); 
						$i = 0;
						while($res1 = $query1->fetch_assoc())
						{
							$countQuery = $db->query('SELECT *, COUNT(gold_sended) as total_gold FROM gold_sended WHERE gold_sended.user_id = "'.$res1['oauth_uid'].'" AND (gold_swap_id = "1") AND (week = "29")');
							$count = $countQuery->fetch_assoc();
							if($i >= $count['total_gold']) { echo '</tr><tr>'; $i = 0;}
							echo '<td>'.$res1['gold_sended'].'</td>
							<td>'.$count['total_gold'].'</td>';
							$i++;
						}
						?>
						</tr>
					</table>
					</div>
					<!--OTHER_DIV-->
					<div style="clear:both;"></div>
				</div>


Output is nu zo


Heb het nu ook op JSFiddle neergezet.
https://jsfiddle.net/1zzsxruw/

Het gaat nu om dit stukje

$query1 = $db->query('
						SELECT * FROM gold_sended, google_users WHERE gold_sended.user_id = google_users.oauth_uid AND (week = "29") AND (gold_sended.gold_swap_id = "1") ORDER BY google_users.portal_name ASC'); 
						$i = 0;
						while($res1 = $query1->fetch_assoc())
						{
							$countQuery = $db->query('SELECT *, COUNT(gold_sended) as total_gold FROM gold_sended WHERE gold_sended.user_id = "'.$res1['oauth_uid'].'" AND (gold_swap_id = "1") AND (week = "29")');
							$count = $countQuery->fetch_assoc();
							if($i >= $count['total_gold']) { echo '</tr><tr>'; $i = 0;}
							echo '<td>'.$res1['gold_sended'].'</td>
							<td>'.$count['total_gold'].'</td>';
							$i++;
						}
						?>


Output:

<tr>
						<td>150000000</td>
							<td>1</td><td>49665854</td>
							<td>4</td><td>650111382</td>
							<td>4</td><td>650111382</td>
							<td>4</td></tr><tr><td>650111382</td>
							<td>4</td></tr><tr><td>1000000000</td>
							<td>1</td>						</tr>


Na die eerste 2 TD's moet een TR komen.
Die andere doet die wel goed.
En als je nu eerst eens alle info ophaalt en in een array opslaat onder eenzelfde oauth_uid, en dit array daarna uitdraait? Lijkt mij een stuk makkelijker.

Je zult trouwens het maximale aantal runs van iemand ergens moeten bijhouden, en de andere rijen opvullen met een colspan ter grootte van het verschil tussen max en runs van de huidige rij. Dit ten einde syntactisch kloppende HTML te schrijven. Simpelweg omdat de/een browser het correct rendert wil niet zeggen dat het klopt.

Ben eigenlijk nog steeds voor een andere opbouw, klinkt niet alsof de owner veel kaas heeft gegeten van interface design.

Reageren