- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在一个基于 Joomla 的 CMS 网站上工作,目前我在弄清楚如何配对我的数据库值时遇到了一些麻烦。我昨天发布了这个问题但删除了它,因为我认为我已经解决了这个问题,而且这个问题的结构很糟糕。希望我能够更好地阐明我想要完成的事情。如有必要,我愿意将其发布到开发站点以供审核(假设此处允许)。
话虽如此,我正在查询四个表。这四个表是项目、附件、标签,然后是另一个将标签 ID 与相关项目 ID 配对的表。
您可以在下面看到这些查询:
// Get all Items associated with this category page
// ID of current category
$current_cat = $this->category->id;
// Product IDs array
$product_ids_array = array();
// Product Names Array
$item_names_array = array();
// Product Descriptions Array
$item_descriptions_array = array();
$db = JFactory::getDbo();
$query = $db->getQuery( true );
$query->select($db->quoteName(array( 'title', 'introtext', 'id' )));
$query->from( $db->quoteName( '#__k2_items' ) );
$query->where( $db->quoteName( 'catid' )." = " .$current_cat );
$db->setQuery( $query );
$row = $db->loadObjectList();
// Store Titles, Descriptions and IDs in arrays
foreach ($row as $value)
{
$item_names_array[] = $value->title;
$item_descriptions_array[] = $value->introtext;
$product_ids_array[] = $value->id;
};
// Now we're going to get the IDs of the tags associated with the items
// Create comma seperated list of product ids
$product_ids = implode(',', $product_ids_array);
// Tag IDs Array
$tag_IDs_array = array();
$tag_itemIDs_array = array();
$db = JFactory::getDbo();
$query = $db->getQuery( true );
$query->select($db->quoteName(array( 'tagID', 'itemID' )));
$query->from( $db->quoteName( '#__k2_tags_xref' ) );
$query->where($db->quoteName('itemID') . ' IN (' . $product_ids . ' )' );
$db->setQuery( $query );
$row = $db->loadObjectList();
// Store tag IDs and item IDs
foreach ($row as $value)
{
$tag_IDs_array[] = $value->tagID;
$tag_itemIDs_array[] = $value->itemID;
};
// Now we're going to get the names of the tags
// Create comma seperated list of tag ids
$tag_IDs = implode(',', $tag_IDs_array );
// Tag Names Array
$tag_names_array = array();
$db = JFactory::getDbo();
$query = $db->getQuery( true );
$query->select($db->quoteName(array( 'name' )));
$query->from( $db->quoteName( '#__k2_tags' ) );
$query->where($db->quoteName('id') . ' IN (' . $tag_IDs . ' )' );
$db->setQuery( $query );
$row = $db->loadObjectList();
// Store tag names
foreach ($row as $value)
{
$tag_names_array[] = $value->name;
};
// Now we're going to get the attachments
// Attachments Arrays
$attachment_itemID_array = array();
$attachment_id_array = array();
$attachment_filename_array = array();
$attachment_title_array = array();
$attachment_title_attr_array = array();
$db = JFactory::getDbo();
$query = $db->getQuery( true );
$query->select($db->quoteName(array( 'id', 'itemID', 'filename', 'title', 'titleAttribute' )));
$query->from( $db->quoteName( '#__k2_attachments' ) );
$query->where($db->quoteName('itemID') . ' IN (' . $product_ids . ' )' );
$db->setQuery( $query );
$row = $db->loadObjectList();
// Store tag names
foreach ($row as $value)
{
$attachment_itemID_array[] = $value->itemID;
$attachment_id_array[] = $value->id;
$attachment_filename_array[] = $value->filename;
$attachment_title_array[] = $value->title;
$attachment_title_attr_array[] = $value->titleAttribute;
};
$db = JFactory::getDbo();
$query = $db->getQuery( true );
$query->select($db->quoteName(array( 'title', 'introtext', 'id' )));
$query->from( $db->quoteName( '#__k2_items' ) );
$query->where($db->quoteName('alias') . ' LIKE '. $db->quote('acid-%') . ' AND ' . $db->quoteName('catid'). ' = ' . $current_cat . ' AND published = 1' );
$db->setQuery( $query );
$row = $db->loadObjectList();
foreach ($row as $value) {
$a = 0;
$a++;
echo $value->title . '<br/>';
echo $value->introtext . '<br/>';
echo $value->id . '<br/>';
}
如您所见,最后一个代码块是对数据库的最终查询,我在其中使用通配符语句执行 SQL Select。我希望它是动态的。
使其动态化的想法是,项目具有与其名称前缀相匹配的标签。一个例子是我有一个名为“酸腐 eclipse 抑制剂”的标签,我有一个别名为“酸腐 eclipse 抑制剂-aci-136”的产品。别名是我可以从数据库中检索到的东西。
无论如何,问题不在于检索数据。问题是一旦我有了数据,我怎么能智能地将数据配对在一起呢?从我在每个实例中的查询中可以看出,我正在提取 itemID,因此我有一些东西可以比较,但从那时起我就迷路了。
我实际上是在尝试将项目与其相关联的标签(每个项目只有一个对应的标签)及其相关联的附件进行匹配。
我希望这是清楚的,如果不是,我会回来查看以进一步澄清并回答任何问题。任何帮助将不胜感激。
谢谢。
更新#1
我想知道 in_array() 是否是一个好的起点。至少我可以检查 itemID 是否存在。类似这样的事情:
if( in_array( $value->id, $attachment_itemID_array ) ) {
echo 'match';
}
我不确定这是否是确保正确的附件链接到正确的项目等的防弹方法。我想这不是,但希望这是一个开始。
更新#2
我开始认为(在某些情况下)在返回查询值时使用关联数组会更好。我认为这会更容易确保正确匹配。
更新#3
希望有人觉得这很有用。我正在尝试访问这个怪物:
Array ( [0] => stdClass Object ( [id] => 2 [itemID] => 5 [filename] => Flotek-logo_1.png [title] => Flotek-logo_1.png [titleAttribute] => Flotek-logo_1.png ) [1] => stdClass Object ( [id] => 3 [itemID] => 6 [filename] => Logo_Court_Guru_Gray.png [title] => Logo_Court_Guru_Gray.png [titleAttribute] => Logo_Court_Guru_Gray.png ) [2] => stdClass Object ( [id] => 5 [itemID] => 4 [filename] => Icon_Search.png [title] => Icon_Search.png [titleAttribute] => Icon_Search.png ) )
所以我可以用它来检查当前项目 ID 是否与数组中的项目 ID 匹配,但是当我使用类似于 $array['itemID'] 的东西时,我得到了一个索引未定义的错误;很明显,我正在以错误的方式处理这个问题。希望找到一些答案,我发现了几个但不是任何一个对某些情况或在某些情况下完全不同的情况有意义。
好的,看起来像:
$attachmentRow[1]->itemID
就是答案。现在我想知道是否有更好的方法来访问它,因为我无法知道对象的索引。我宁愿至少梳理关联数组中的每个对象。
更新 #4
了解如何使用 json_decode 简化数组
$attachmentResult = json_decode(json_encode($attachmentRow),true);
结果
Array ( [0] => Array ( [id] => 2 [itemID] => 5 [filename] => Flotek-logo_1.png [title] => Flotek-logo_1.png [titleAttribute] => Flotek-logo_1.png ) [1] => Array ( [id] => 3 [itemID] => 6 [filename] => Logo_Court_Guru_Gray.png [title] => Logo_Court_Guru_Gray.png [titleAttribute] => Logo_Court_Guru_Gray.png ) [2] => Array ( [id] => 5 [itemID] => 4 [filename] => Icon_Search.png [title] => Icon_Search.png [titleAttribute] => Icon_Search.png ) )
在使用长行的东西时仍然得到一个索引未定义的错误
echo $attachmentResult['itemID'];
仍在尝试正确访问关联数组。
没关系。这是正确的方法。
echo $attachmentResult[0]['itemID'];
更新 #5
好吧,我想我差不多明白了。我找到了一个非常有用的解决方案,可以在这里找到:How to search by key=>value in a multidimensional array in PHP - 搜索多维数组非常方便
用于循环遍历项目/产品的更新查询
$db = JFactory::getDbo();
$query = $db->getQuery( true );
$query->select($db->quoteName(array( 'title', 'introtext', 'id' )));
$query->from( $db->quoteName( '#__k2_items' ) );
$query->where($db->quoteName('alias') . ' LIKE '. $db->quote('acid-%') . ' AND ' . $db->quoteName('catid'). ' = ' . $current_cat . ' AND published = 1' );
$db->setQuery( $query );
$row = $db->loadObjectList();
foreach ($row as $value) {
$itemID = $value->id;
$search_result = (search($attachmentResult, 'itemID', $itemID));
if($search_result) {
$db = JFactory::getDbo();
$query = $db->getQuery( true );
$query->select($db->quoteName(array( 'filename' )));
$query->from( $db->quoteName( '#__k2_attachments' ) );
$query->where( $db->quoteName( 'itemID' )." = " .$itemID );
$db->setQuery( $query );
$attachmentRow = $db->loadObjectList();
foreach ($attachmentRow as $attachmentValue) {
echo $attachmentValue->filename;
}
}
echo $value->introtext . '<br/>';
}
最佳答案
好的,我让它工作了。我不确定这是否是最优雅的解决方案。如果有人想参与改进,我会洗耳恭听。希望这对将来遇到类似问题的人有所帮助。
我的最终项目/产品循环查询:
// Get all Items associated with this category page
// ID of current category
$current_cat = $this->category->id;
// Product IDs array
$product_ids_array = array();
$db = JFactory::getDbo();
$query = $db->getQuery( true );
$query->select($db->quoteName(array('id' )));
$query->from( $db->quoteName( '#__k2_items' ) );
$query->where( $db->quoteName( 'catid' )." = " .$current_cat . ' AND published = 1' );
$db->setQuery( $query );
$row = $db->loadObjectList();
// Store Titles, Descriptions and IDs in arrays
foreach ($row as $value)
{
$product_ids_array[] = $value->id;
};
// Now we're going to get the IDs of the tags associated with the items
// Create comma seperated list of product ids
$product_ids = implode(',', $product_ids_array);
// Tag IDs Array
$tag_IDs_array = array();
$db = JFactory::getDbo();
$query = $db->getQuery( true );
$query->select($db->quoteName(array( 'tagID', 'itemID' )));
$query->from( $db->quoteName( '#__k2_tags_xref' ) );
$query->where($db->quoteName('itemID') . ' IN (' . $product_ids . ' )' );
$db->setQuery( $query );
$row = $db->loadObjectList();
$tagsRow = $db->loadObjectList();
$tagsResult = array();
$tagsResult = json_decode(json_encode($tagsRow),true);
// Store tag IDs and item IDs
foreach ($row as $value)
{
$tag_IDs_array[] = $value->tagID;
};
// Now we're going to get the names of the tags
// Create comma seperated list of tag ids
$tag_IDs = implode(',', $tag_IDs_array );
// Tag Names Array
$tag_names_array = array();
$db = JFactory::getDbo();
$query = $db->getQuery( true );
$query->select($db->quoteName(array( 'name' )));
$query->from( $db->quoteName( '#__k2_tags' ) );
$query->where($db->quoteName('id') . ' IN (' . $tag_IDs . ' )' );
$db->setQuery( $query );
$row = $db->loadObjectList();
// Store tag names
foreach ($row as $value)
{
$tag_names_array[] = $value->name;
};
// Now we're going to get the attachments
// Attachments Arrays
$db = JFactory::getDbo();
$query = $db->getQuery( true );
$query->select($db->quoteName(array( 'id', 'itemID', 'filename', 'title', 'titleAttribute' )));
$query->from( $db->quoteName( '#__k2_attachments' ) );
$query->where($db->quoteName('itemID') . ' IN (' . $product_ids . ' )' );
$db->setQuery( $query );
$attachmentRow = $db->loadObjectList();
$attachmentResult = array();
$attachmentResult = json_decode(json_encode($attachmentRow),true);
// Function to search multidimensional arrays
function search($array, $key, $value)
{
$results = array();
if (is_array($array)) {
if (isset($array[$key]) && $array[$key] == $value) {
$results[] = $array;
}
foreach ($array as $subarray) {
$results = array_merge($results, search($subarray, $key, $value));
}
}
return $results;
}
// Now we're going to create our product loop
// Get Tag Names
foreach( $tag_names_array as $display_tag_name ) {
// Unformatted Tag Name - this is the one that will be displayed on the front end
$unformatted_display_tag_name = $display_tag_name;
// Convert Tag Name White Spaces to Dashes
$display_tag_name = preg_replace("/[\s_]/", "-", $display_tag_name);
// Lower Case Tag Name
$display_tag_name = strtolower($display_tag_name);
switch ( $display_tag_name == $display_tag_name ) {
case $display_tag_name:
$db = JFactory::getDbo();
$query = $db->getQuery( true );
$query->select($db->quoteName(array( 'title', 'introtext', 'id' )));
$query->from( $db->quoteName( '#__k2_items' ) );
$query->where($db->quoteName('alias') . ' LIKE '. $db->quote($display_tag_name.'-%') . ' AND ' . $db->quoteName('catid'). ' = ' . $current_cat . ' AND published = 1' );
$db->setQuery( $query );
$row = $db->loadObjectList();
// Start Row
echo '<div class="row">';
// Start 12 Column
echo '<div class="col-lg-12">';
// Start Row
echo '<div class="row">';
// Start Item Container
echo '<section class="item-container">';
// Display Tag Name
echo '<div class="col-lg-12"><section class="tag-name"><a href="#">' . $unformatted_display_tag_name . '</a></section></div>';
foreach ($row as $value) {
// Start Column 6
echo '<div class="col-lg-6 is-hidden">';
// Store ID of item
$itemID = $value->id;
// Search attachmentResult array
$attachment_search_result = (search($attachmentResult, 'itemID', $itemID));
// Check to see if there are any associated attachments - display attachment is present
if($attachment_search_result) {
$db = JFactory::getDbo();
$query = $db->getQuery( true );
$query->select($db->quoteName(array( 'filename' )));
$query->from( $db->quoteName( '#__k2_attachments' ) );
$query->where( $db->quoteName( 'itemID' )." = " .$itemID );
$db->setQuery( $query );
$attachmentRow = $db->loadObjectList();
foreach ($attachmentRow as $attachmentValue) {
echo $attachmentValue->filename . '<br/>';
}
}
// Display Item Title
echo '<h5>' .$value->title. '</h5>';
// Display Item Text
echo '<p>' .$value->introtext. '</p>';
// End Column 6
echo '</div>';
}
// Close Item Container
echo '</section>';
// Close Row
echo '</div>';
// Close 12 Column
echo '</div>';
// Close Row
echo '</div>';
}
}
?>
<!-- /Display Category Items -->
关于php - 需要帮助配对数据库值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28704644/
我正在尝试用 C 语言编写一个使用 gstreamer 的 GTK+ 应用程序。 GTK+ 需要 gtk_main() 来执行。 gstreamer 需要 g_main_loop_run() 来执行。
我已经使用 apt-get 安装了 opencv。我得到了以下版本的opencv2,它工作正常: rover@rover_pi:/usr/lib/arm-linux-gnueabihf $ pytho
我有一个看起来像这样的 View 层次结构(基于其他答案和 Apple 的使用 UIScrollView 的高级 AutoLayout 指南): ScrollView 所需的2 个步骤是: 为 Scr
我尝试安装 udev。 udev 在 ./configure 期间给我一个错误 --exists: command not found configure: error: pkg-config and
我正在使用 SQLite 3。我有一个表,forums,有 150 行,还有一个表,posts,有大约 440 万行。每个帖子都属于一个论坛。 我想从每个论坛中选择最新帖子的时间戳。如果我使用 SEL
使用 go 和以下包: github.com/julienschmidt/httprouter github.com/shwoodard/jsonapi gopkg.in/mgo.v2/bson
The database仅包含 2 个表: 钱包(100 万行) 事务(1500 万行) CockroachDB 19.2.6 在 3 台 Ubuntu 机器上运行 每个 2vCPU 每个 8GB R
我很难理解为什么在下面的代码中直接调用 std::swap() 会导致编译错误,而使用 std::iter_swap 编译却没有任何错误. 来自 iter_swap() versus swap() -
我有一个非常简单的 SELECT *用 WHERE NOT EXISTS 查询条款。 SELECT * FROM "BMAN_TP3"."TT_SPLDR_55E63A28_59358" SELECT
我试图按部分组织我的 .css 文件,我需要从任何文件访问文件组中的任何类。在 Less 中,我可以毫无问题地创建一个包含所有文件导入的主文件,并且每个文件都导入主文件,但在 Sass 中,我收到一个
Microsoft.AspNet.SignalR.Redis 和 StackExchange.Redis.Extensions.Core 在同一个项目中使用。前者需要StackExchange.Red
这个问题在这里已经有了答案: Updating from Rails 4.0 to 4.1 gives sass-rails railties version conflicts (4 个答案) 关
我们有一些使用 Azure DevOps 发布管道部署到的现场服务器。我们已经使用这些发布管道几个月了,没有出现任何问题。今天,我们在下载该项目的工件时开始出现身份验证错误。 部署组中的节点显示在线,
Tip: instead of creating indexes here, run queries in your code – if you're missing any indexes, you
你能解释一下 Elm 下一个声明中的意思吗? (=>) = (,) 我在 Elm architecture tutorial 的例子中找到了它 最佳答案 这是中缀符号。实际上,这定义了一个函数 (=>
我需要一个 .NET 程序集查看器,它可以显示低级详细信息,例如元数据表内容等。 最佳答案 ildasm 是 IL 反汇编程序,具有低级托管元数据 token 信息。安装 Visual Studio
我有两个列表要在 Excel 中进行比较。这是一个很长的列表,我需要一个 excel 函数或 vba 代码来执行此操作。我已经没有想法了,因此转向你: **Old List** A
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想要改善这个问题吗?更新问题,以便将其作为on-topi
我正在学习 xml 和 xml 处理。我无法很好地理解命名空间的存在。 我了解到命名空间帮助我们在 xml 中分离相同命名的元素。我们不能通过具有相同名称的属性来区分元素吗?为什么命名空间很重要或需要
我搜索了 Azure 文档、各种社区论坛和 google,但没有找到关于需要在公司防火墙上打开哪些端口以允许 Azure 所有组件(blob、sql、compute、bus、publish)的简洁声明
我是一名优秀的程序员,十分优秀!