gpt4 book ai didi

php - 分页。从 x 个表中选择

转载 作者:行者123 更新时间:2023-11-29 08:56:03 26 4
gpt4 key购买 nike

我正在尝试使用 php 制作我的第二个网站,但我遇到了一些典型的问题(我相信),但对我来说很难。

我正在制作一个显示依赖于 GET 的项目列表的页面。

#1 如果仅发送“类型” - 显示所有具有 x 类型的项目。

#2 如果仅发送“标签” - 显示带有 x 标签的所有项目。

#3 如果“类型”和“标签”同时发送 - 显示具有 x 类型和 x 标签的所有项目。

问题#1我用这种方法解决了

// items per page
$per_page = 5;

// 1) if isset type
if ( (isset($_GET['type'])) && (!isset($_GET['tag'])) ){
$type_id = get_safe_var($_GET['type']);

$con = mysql_connect(DB_HOST,DB_LOGIN,DB_PASSWORD) or die(mysql_error());
if ($con) {
mysql_select_db(DB_NAME) or die(mysql_error());

$sql = mysql_query("SELECT `item_type`, `item_type_name` FROM `item_types` WHERE `type_id` = '$type_id'");

$row = mysql_fetch_assoc($sql);
$type = $row['item_type'];
$type_name = $row['item_type_name'];

if ($type != ''){
$pages_query = mysql_query("SELECT COUNT(`id`) FROM `".$type."` WHERE `insearch` = '1'");

$number_of_pages = ceil( mysql_result($pages_query, 0) / $per_page );

$current_page = ( (isset($_GET['page'])) && ((int)$_GET['page'] > 0) ) ? (int)$_GET['page'] : 1;
$start = ($current_page - 1) * $per_page;

echo "<h1>$type_name</h1>";
$sql = mysql_query("SELECT `id`, `name`, `img` FROM `".$type."` WHERE `insearch` = '1' ORDER BY `id` DESC LIMIT $start, $per_page");
// echo items
while ($row = mysql_fetch_assoc($sql)){
$id = $row['id'];
$name = $row['name'];
$img = $row['img'];

echo "
<div id='items_cell'>
<img alt='$name' src='$img' width='145' height='200' /><br />
<a href='open_item.php?type=$type_id&id=$id'>$name</a><br />
<em>$type_name</em>
</div>";
}
}
mysql_close($con);
} else {echo 'sql connection error';}

}

分页

// echo pagination

// 1) if isset type
if ( (isset($_GET['type'])) && (!isset($_GET['tag'])) ){
if ( (isset($number_of_pages)) && ($number_of_pages >= 1) && ($current_page <= $number_of_pages) ){
for ($i = 1; $i <= $number_of_pages; $i++){
if ($i == $current_page){
echo "<li><a href='?type=$type_id&page=$i' class='sel'>$i</a></li>";
} else {
echo "<li><a href='?type=$type_id&page=$i'>$i</a></li>";
}
}
}
}

我陷入了问题#2。

我得到了标签 ID。需要显示带有该标签的所有项目。我不明白如何使用有效的分页从 x 个表中进行选择。

数据库结构 - enter image description here

欢迎任何帮助!

附注也许我需要更改数据库结构以使 SELECT 更容易?

最佳答案

你绝对应该致力于你的表格设计。拥有动态表名是一个很大的禁忌,因为您将永远无法进行任何有用的连接。只需创建一个大标记表并添加一列 type,就像您在表 item_types 中所做的那样。

要解决问题 #1-#3,只需动态构建查询的 WHERE 部分即可:

// empty selection
$where = array();

if (!empty($_GET["type"])
$where[] = "`item_type` = '".mysql_real_escape_string($_GET["type"])."'";

if (!empty($_GET["tag"])
$where[] = "`tag` = '".mysql_real_escape_string($_GET["tag"])."'";

$query = "SELECT ... FROM `item`"
// Join type-table
. " JOIN `item_types` ON `item`.`id` = `item_types`.`item_id`"

// Join all of this item's tags
. " JOIN `item_tags` ON `item`.`id` = `item_tags`.`item_id`"

// Filter tags by item_type
. " AND `item_types`.`item_type` = `item_tags`.`item_type`"
;

if (count($where) > 0)
$query .= "WHERE ".implode(" AND ", $where);

关于php - 分页。从 x 个表中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9963526/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com