最好的方法来处理重复的事情与MYSQL和PHP

dxxyhpgq  于 2022-12-26  发布在  PHP
关注(0)|答案(1)|浏览(127)

我在数据库中有两个名为tbl_rotator_urls和tbl_rotators_data的表
tbl_rotator_urls包含URL并且tbl_rotators_data包含具有IP地址的URL访问历史。
我重定向用户的网址位置的基础上。在第一次访问用户获得重定向的第一个位置的网址,在第二次访问用户获得重定向的第二个位置的网址等。
对于以上的事情,我正在检查这样的表,并作出如下查询

$visited_urls=-1;
    $stmt = $conn->prepare("SELECT link_id 
                            FROM tbl_rotators_data 
                            WHERE rotator_id = ? 
                            AND link_id !=0 
                            AND ip=?");
    $stmt->bind_param('is',$rotator_id,$ip);
    $stmt->execute();
    $visited_result = $stmt->get_result();
    $total_visited_urls = $visited_result->num_rows;
    $stmt->close();
    $visited_array = array();
    if($total_visited_urls>0){
        while($visited_row=mysqli_fetch_array($visited_result)){
           $visited_array[] = $visited_row['link_id'];
        }
        if(sizeof($visited_array)>0){
          $visited_urls = implode(',', $visited_array); 
          
        }else{
           $visited_urls=-1; 
        }
        
    }

所以它给我逗号分隔列表的用户访问的网址
我正在使用像下面的获取下一个保持网址

//select URL which is not visited by USER
    $stmt = $conn->prepare("SELECT u.url_id,u.url_url,
                            FROM tbl_rotator_urls u 
                                LEFT JOIN tbl_rotators_data l ON u.url_id=l.link_id 
                            WHERE u.rotator_id = ? 
                            AND u.url_id NOT IN($visited_urls) 
                            AND url_status=0 
                            GROUP BY u.url_id 
                            ORDER BY $orderby ASC");
    $stmt->bind_param('i',$rotator_id);
    $stmt->execute();
    $url_result = $stmt->get_result();
    $total_urls = $url_result->num_rows;
    if($total_urls== 0){
        // USER have visited all URLS SO set $visited_urls=-1; SO it can get URL again
        $visited_urls=-1;   //this is doubtful point, I should do something else or more with this but no idea
        $stmt = $conn->prepare("SELECT u.url_id,u.url_url,
                                FROM tbl_rotator_urls u 
                                    LEFT JOIN tbl_rotators_data l ON u.url_id=l.link_id 
                                WHERE u.rotator_id = ? 
                                AND u.url_id NOT IN($visited_urls) 
                                AND url_status=0 
                                GROUP BY u.url_id 
                                ORDER BY $orderby ASC");
        $stmt->bind_param('i',$rotator_id);
        $stmt->execute();
        $url_result = $stmt->get_result();
        $total_urls = $url_result->num_rows; 
    
    }
    
    ..... CONTINUE MY CODE FOR REDIRECT

在上述函数中,如果用户访问了所有URL,我将设置$visited_urls = -1,这样我就可以获得URL,但在所有访问中,我将获得相同的URL,而不是像下面这样一个接一个
例如,我有5个网址,我想重复喜欢

1
2
3
4
5
1
2
3
4
5

数据库表信息
tbl_rotator_urls结构如下所示

url_id, url_name, url_url

tbl_rotators_数据结构如下所示

rid, link_id,rotator_id, ip,timestamp

我不知道如何将示例数据放在这里,所以我用Excel编写,并将图像放在这里

    • 样本数据图像**:

我正在学习PHP和斗争,从过去两个小时为实现我的目标,但不知道我怎么能做到这一点。让我知道,如果任何Maven在这里可以帮助我相同。
谢谢!

bis0qfac

bis0qfac1#

我希望这段代码能用

$stmt = $conn->prepare("SELECT u.url_id,u.url_url,
                        FROM tbl_rotator_urls u 
                            LEFT JOIN tbl_rotators_data l ON u.url_id=l.link_id 
                        WHERE u.rotator_id = ? 
                        AND u.url_id NOT IN(
                            SELECT link_id 
                            FROM tbl_rotators_data 
                            WHERE rotator_id = ? 
                            AND link_id !=0 
                            AND ip=?
                        ) 
                        AND url_status=0 
                        GROUP BY u.url_id 
                        ORDER BY $orderby ASC");
$stmt->bind_param(1 ,$rotator_id);
$stmt->bind_param(2 ,$rotator_id);
$stmt->bind_param(3 ,$ip);
$stmt->execute();
$url_result = $stmt->get_results(); // array of database results

相关问题