我的wordpress数据库中有一个自定义表。在数据库中,我正在显示带有自己画廊ID的照片画廊。每个画廊都有多张照片,所以我可能有:
image_link: img1.png | upload_id: 47372
image_link: img2.png | upload_id: 47372
image_link: img3.png | upload_id: 47372
image_link: img4.png | upload_id: 373h3
image_link: img5.png | upload_id: 373h3
我有返回img id的代码,并将用户链接到可以查看图库的URL:
$results = $wpdb->get_results( "SELECT * FROM wp_prefix_photos WHERE user_email='" . $email . "' AND created_date > $sevenDays ORDER BY created_date ASC" );
ob_start();
$arr = array();
foreach ( $results as $result )
{
$arr[] = "<div style='border: 1px solid black'><a href='https://mywebsite.com/?photoID=" . $result->upload_id . "'>https://mywebsite.com/?photoID=" . $result->upload_id . "</a></div>";
}
$unique_data = array_unique($arr);
// now use foreach loop on unique data
foreach($unique_data as $val)
{
echo $val;;
}
$output = ob_get_clean(); // set the buffer data to variable and clean the buffer
return $output;
请注意,它包装在缓冲区中,因为它在Wordpress短代码中,并且foreach停止返回第一个结果。我还使用array_unique()来确保所有结果都是唯一的(无需两次显示相同的upload_id)。
现在,这是问题所在:我想为每个upload_id获取第一个也是唯一的image_link。当您将echo "<br>" . $result->image_link;
粘贴在foreach ( $results as $result )
内时,它会打印出所有与ID匹配的网址,由于每个img网址都是唯一的,因此我无法再次使用array_unique($arr);
。
我认为我可以在foreach($unique_data as $val)
内执行另一个数据库查询,使用$ val作为upload_id并获取第一个结果,但是有什么方法可以调整此值,所以我不必这样做吗?而且,如果我这样做了,那么在服务器上运行与foreach结果一样多的数据库查询是否会增加负担?
答案 0 :(得分:0)
请将您的查询更改为
“ SELECT max(image_link)as image_link,upload_id FROM wp_prefix_photos WHERE user_email ='”。 $ email。 “'AND created_date> $ sevenDays组,由upload_id ORDER BY created_date ASC”
答案 1 :(得分:0)
在问完问题后仅30分钟,我就解决了这个问题,但在问了几个小时之前,我已经做了好几个小时,所以对于遇到的其他人:
$results = $wpdb->get_results( "SELECT * FROM wp_prefix_photos WHERE user_email='" . $email . "' AND created_date > $sevenDays GROUP BY upload_id" );
ob_start();
$arr = array();
foreach ( $results as $result )
{
echo "<div style='border: 1px solid black'><a href='https://mywebsite.com/?photoID=" . $result->upload_id . "'>https://mywebsite.com/?photoID=" . $result->upload_id . "</a></div>";
echo $result->image_link;
}
$output = ob_get_clean(); // set the buffer data to variable and clean the buffer
return $output;
我摆脱了array_unique($arr);
并在查询中将其替换为GROUP BY upload_id
,这似乎是为了确保唯一的upload_id,并且与echo $result->image_link;
一起使用时,每个唯一的{{1 }}。