如何仅获取第一个结果mysql php-foreach中的多个查询

时间:2018-11-23 12:33:57

标签: php mysql wordpress

我的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结果一样多的数据库查询是否会增加负担?

2 个答案:

答案 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 }}。

对此问题的参考:wp get_results - filter unique records