Coming from another question of mine where I learnt not to EVER use db queries within loops I consequently have to learn how to fetch all the data in a convenient way before
The query should look something like this:
SELECT * FROM scales
INNER JOIN items ON scales.id = items.scale_id
If you want to iterate through with nested loops, you'll need to pull this data into an array - hopefully you're not pulling back so much that it'll eat up too much memory.
$scales = array();
while ($row = mysql_fetch_assoc($data))
{
if (!isset($scales[$row['scale_id']]))
{
$row['items'] = array();
$scales[$row['scale_id']] = $row;
}
$scales[$row['scale_id']]['items'][] = $row;
}
Then you can loop through:
foreach ($scales as $scale)
{
foreach ($scale['items'] as $item)
; //... do stuff
}
Note: this is somewhat naive in that $scale and $item will both contain fields from BOTH tables... if that's a problem then you need to change the assignments in the loop above to pull out only the fields you want.
It might be easier to first get all the scales, then all the items.
//first get scales
while ($row = fetchrowfunctionhere()) {
$scale = $scales->createFromArray($row);
}
//then get items
$lastId = null;
while ($row = fetchrowfunctionhere()) {
$scaleId = $row['scaleID'];
if ($lastId != $scaleId) {
$scale = $scales->getByScaleId($scaleId);
}
$item = $items->createFromArray($row);
$scale->addItem($item);
$lastId = $scaleId;
}
or everything in one sql
$lastId = null;
while ($row = fetchrowfunctionhere()) {
$scaleData = array_slice($row, 0, 5, true);
$itemData = array_slice($row, 5, 5, true);
$scaleId = $scaleData['scaleID'];
if ($lastId != $scaleId) {
$scale = $scales->createFromArray($scaleData);
}
$item = $items->createFromArray($itemData);
$scale->addItem($item);
$lastId = $scaleId;
}
everything as one happy array
while ($row = fetchrowfunctionhere()) {
$scaleData = array_slice($row, 0, 5, true);
$itemData = array_slice($row, 5, 5, true);
$scaleId = $scaleData['scaleID'];
if (!isset($scales[$scaleId])) {
$scales[$scaleId] = $scaleData;
}
$itemId = $itemData['itemID'];
$scales[$scaleId]['items'][$itemId] = $itemData;
}