У меня есть две таблицы и интересно, можно ли объединить их в один запрос.Paginate через две разные таблицы
сценарий получает catID
как GET, то необходимо перечислить все subCats (если таковые имеются), а затем список фотографий, которые находятся в mainCat cat = catID and subcat = 0
subCats
стол:
id | parentCat | title | addedBy | date | active | defaultPhoto
photos
стол: id | title | description | fileName | fileType | uploadedBy | time | cat | subCat
У меня есть сценарий разбивки на страницы, который принимает счет и генерирует ПРЕДЕЛ, чтобы использовать , Удивление, могу ли я объединить это в один запрос для обеих таблиц, как сделать паутингу проще с тем, что у меня уже есть. Таким образом, каждый выбирает счет для обоих с соединением, затем другой выбирает результаты.
Любые идеи? На самом деле это застряло.
Это мое грязное начало, но это похоже на плохой дизайн до сих пор:
<?php
if ($catInfoResult = $db->select("SELECT * FROM cats WHERE id = '%s' LIMIT 1", $catID))
{
if ($db->numRows > 0)
{
$pageTitle = h($catInfoResult[0]['title']) . ' - Photo Gallery';
?>
<div class="headingTitle"><?=h($catInfoResult[0]['title'])?> Photos</div>
<?php
//get subCats
$subCatCountResult = $db->count('subCats', '*', array('parentCat' => $catID));
if (is_numeric($subCatCountResult))
{
$PerPage = 9; //how many locations you want to show per page
$subCatLastPage = ceil($subCatCountResult/$PerPage);
if ($subCatLastPage < 1)
{
$subCatLastPage = 1;
}
$pageNum = (isset($_GET['pg'])) ? trim($_GET['pg']) : 1;
$pageNum = preg_replace('#[^0-9]#', '', $pageNum);
//////////////////////////////////////////////////
$subCatLimit = 'LIMIT ' . ($pageNum - 1) * $PerPage . ',' . $PerPage;
//////////////////////////////////////////////////
$itemList = array(
'subCats' => array(),
'photos' => array()
);
if ($subCatListResult = $db->select("SELECT * FROM subCats WHERE parentCat = %s ORDER BY title $subCatLimit", $catID))
{
if ($db->numRows > 0)
{
foreach ($subCatListResult as $row)
{
$photoID = 0;
if ($row['defaultPhoto'] == 0) //look up photo for
{
if ($firstPhotoResult = $db->select("SELECT id, time FROM photos WHERE subCat = '%s' ORDER BY time ASC LIMIT 1", $row['id']))
{
if ($db->numRows > 0)
{
$photoID = $firstPhotoResult[0]['id'];
}
else
{
$photoID = -1;
}
}
}
else
{
$photoID = $row['defaultPhoto'];
}
//add to $itemList
$itemList['subCats'][$row['id']] = array(
'title' => $row['title']
);
$itemList['subCats'][$row['id']]['defaultPhoto'] = $photoID;
}
}
}
else
{
throwDBError();
}
function addPhotoToItemList($row)
{
global $itemList;
$itemList['photos'][$row['id']] = array(
'title' => $row['title'],
'fileName' => $row['fileName'],
'fileType' => $row['fileType']
);
//
}
//get photos after subcats
$photosOffset = 0;
$grabPhotosCount = 9 - count($itemList['subCats']);
if ($grabPhotosCount > 0)
{
if ($result = $db->select("SELECT * FROM photos WHERE cat = %s and subCat = 0 ORDER BY title LIMIT 0, $grabPhotosCount", $catID))
{
if ($db->numRows > 0)
{
foreach ($result as $row)
{
$photosOffset++;
addPhotoToItemList($row);
}
}
}
else
{
throwDBError();
}
}
//get photos in maincat
$photosCountResult = $db->count('photos', '*', array('cat' => $catID, 'subCat' => 0));
if (is_numeric($photosCountResult))
{
}
else
{
throwDBError();
}
if ($pageNum < 1)
{
$pageNum = 1;
}
else if ($pageNum > $subCatLastPage) //get photos
{
if (count($itemList) < 9)
{
//load in photos for cat
}
//redirect('/gallery/?cat=' . $catID . '&pg=' . $lastPage);
}
//pagination
$totalCounts = $grabPhotosCount + $subCatCountResult;
$lastPage = ceil($totalCounts/$PerPage);
if ($lastPage < 1)
{
$lastPage = 1;
}
$pageNum = (isset($_GET['pg'])) ? trim($_GET['pg']) : 1;
$pageNum = preg_replace('#[^0-9]#', '', $pageNum);
}
else
{
throwDBError();
}
echo '<pre>';
print_r($itemList);
echo '</pre>';
}
else
{
echo '<div align="center">Category not found.</div>';
}
}
else
{
throwDBError();
}
?>
да, вы можете. Для реальных ответов, показать реальный код – Sebas
Ваше описание сбивает с толку и неясно. Дайте нам код, который вы используете, и мы либо очистим его, либо дадим вам большие пальцы. – Snowburnt
добавил мой грязный старт. Идея заключается в том, что он будет перечислять все подкаты для кошки, а затем перечислить все фотографии в главной кошке. – Keverw