簡體   English   中英

結合兩個phpmysql查詢

[英]combine two phpmysql queries

我想結合這兩個php mysql查詢,並想要得到一個結果集數組。 第一個查詢給出所有與memberby和postby相關的帖子,第二個查詢給出所有與member_id為0, post_by為0且admin_id不為0和super_admin_post 0的與admin相關的帖子。

數據庫:
1)wall_post_master這是我的第一個數據庫字段。
wp_idwp_cat_idwl_textwp_imgdatetimedisplevelmg_idmember_idadmin_idfamily_idpost_byphoto_idpost_categorygeneration_idvisible_tohighlightsuper_admin_post

2)admin_user_master這是我的第二個數據庫字段。
user_idfamily_idfirst_namelast_namepasswordemail_iduser_level

這是我顯示留言牆數據的條件:
1)如果mg_id退出,且有多個member_id與逗號相關。
2)如果visible_to退出且具有多個member_id與逗號相關。
3)如果member_id與當前member_id一起退出。
4)如果member_id在post_by中退出。
5)如果member_id為0,post_by為0,super_admin_post = 0,那么我想顯示為管理員帖子。

第一個查詢:

$grpsearch = "";
foreach ($arrseltran as $grpid) {
    $grpsearch .= " OR ( FIND_IN_SET('" . $grpid . "', wp.mg_id) AND displevel = 3)";
}
if($time == ""){ $time .= " WHERE"; }else{ $time .=" AND"; }
$time .= "
    wp.family_id = " . $_SESSION['logft']['family_id'] . " AND
    wp.post_category = 0 AND  
    ( 
        wp.member_id = " . $_SESSION['logft']['member_id'] . " OR 
        wp.post_by = " . $_SESSION['logft']['member_id'] . " OR 
        FIND_IN_SET('" . $_SESSION['logft']['member_id'] . "', wp.visible_to) " . $grpsearch . " OR 
        displevel = 1 
    )";

$timeline = "SELECT wp.*, 
wp.member_id, 
wp.datetime AS TimeSpent,
wp_cat.font_color,
photo.photo_path, 
mm.first_name,
mm.middle_name,
mm.last_name,
mm1.first_name AS to_first_name,
mm1.middle_name AS to_middle_name, 
mm1.last_name AS to_last_name
FROM wall_post_master wp 
INNER JOIN 
    wallpost_cat_master wp_cat ON wp_cat.wp_cat_id = wp.wp_cat_id
INNER JOIN 
    member_master mm ON mm.member_id = (CASE WHEN (wp.post_by = 0) THEN wp.member_id ELSE wp.post_by END)
INNER JOIN 
    member_master mm1 ON mm1.member_id = wp.member_id
LEFT JOIN 
    photo_master photo ON photo.photo_id = mm.photo_id
" . $time ." ORDER BY Timespent DESC";

第二個查詢:

$timeline1 = "SELECT wpa.*, 
wpa.family_id, 
wpa.datetime AS TimeSpent,
wp_cat.font_color,
wpa.wp_img,
c.family_id,
c.family_name,
c.editor_photo,
aum.first_name,
aum.last_name
FROM wall_post_master wpa 
INNER JOIN 
    wallpost_cat_master wp_cat ON wp_cat.wp_cat_id = wpa.wp_cat_id
INNER JOIN 
    config c ON c.family_id = wpa.family_id
INNER JOIN
    admin_user_master aum ON aum.family_id = wpa.family_id
where 
    aum.user_level = 1 and 
    wpa.admin_id <> 0 and 
    wpa.family_id='".$_SESSION['logft']['family_id']."' and 
    wpa.member_id=0 and 
    wpa.post_by=0  and 
    wpa.super_admin_post=0 
ORDER 
  BY Timespent DESC";

使用Join本身的概念

select a.col1,a.col2,b.col1,b.col3 from first_table as a, second_table as b where a.col1=condition and b.col1=condition

您可以使用mysqli函數:

mysqli_multi_query()

要么

mysqli::multi_query()

http://php.net/manual/en/mysqli.multi-query.php

來自鏈接的完整示例:

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$query  = "SELECT CURRENT_USER();";
$query .= "SELECT Name FROM City ORDER BY ID LIMIT 20, 5";

/* execute multi query */
if ($mysqli->multi_query($query)) {
    do {
        /* store first result set */
        if ($result = $mysqli->store_result()) {
            while ($row = $result->fetch_row()) {
                printf("%s\n", $row[0]);
            }
            $result->free();
        }
        /* print divider */
        if ($mysqli->more_results()) {
            printf("-----------------\n");
        }
    } while ($mysqli->next_result());
}

/* close connection */
$mysqli->close();
?>
Procedural style

<?php
$link = mysqli_connect("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$query  = "SELECT CURRENT_USER();";
$query .= "SELECT Name FROM City ORDER BY ID LIMIT 20, 5";

/* execute multi query */
if (mysqli_multi_query($link, $query)) {
    do {
        /* store first result set */
        if ($result = mysqli_store_result($link)) {
            while ($row = mysqli_fetch_row($result)) {
                printf("%s\n", $row[0]);
            }
            mysqli_free_result($result);
        }
        /* print divider */
        if (mysqli_more_results($link)) {
            printf("-----------------\n");
        }
    } while (mysqli_next_result($link));
}

/* close connection */
mysqli_close($link);
?>

如果您匹配兩個查詢中選擇的字段名稱,則可以使用UNION

http://dev.mysql.com/doc/refman/5.0/en/union.html

http://www.mysqltutorial.org/sql-union-mysql.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM