mysql
  • join
  • 2010-06-16 204 views 1 likes 
    1

    我有一個網站,我有一個數據庫的所有帳戶和whatnot,另一個用於存儲用戶在網站上完成的操作。mysql - 合併列和表

    每個用戶都有自己的表格,但是我想合併每個用戶組(所有「被鏈接在一起」的用戶)的數據,並在操作發生時對數據進行排序。

    這是我的;

    <?php 
    $query = "SELECT `TALKING_TO` FROM `nnn_instant_messaging` WHERE `AUTHOR` = '" . DISPLAY_NAME . "' AND `TALKING_TO` != ''"; 
    $query = mysql_query($query, $CON) or die("_error_ " . mysql_error()); 
    if(mysql_num_rows($query) != 0) { 
        $table_str = ""; 
        $select_ref_clause = "("; 
        $select_time_stamp_clause = "("; 
        while($row = mysql_fetch_array($query)) { 
         $table_str .= "`actvbiz_networks`.`" . $row['TALKING_TO'] . "`, "; 
         $select_ref_clause .= "`actvbiz_networks`.`" . $row['TALKING_TO'] . ".REF`, "; 
         $select_time_stamp_clause .= "`actvbiz_networks`.`" . $row['TALKING_TO'] . ".TIME_STAMP`, "; 
        } 
        $table_str = $table_str . "`actvbiz_networks`.`" . DISPLAY_NAME . "`"; 
        $select_ref_clause = substr($select_ref_clause, 0, -2) . ") AS `REF`, "; 
        $select_time_stamp_clause = substr($select_time_stamp_clause, 0, -2) . ") AS `TIME_STAMP`";  
    }else{ 
        $table_str = "`actvbiz_networks`.`" . DISPLAY_NAME . "`"; 
        $select_ref_clause = "`REF`, "; 
        $select_time_stamp_clause = "`TIME_STAMP`"; 
    } 
    $where_clause = $select_ref_clause . $select_time_stamp_clause; 
    
    $query = "SELECT " . $where_clause . " FROM " . $table_str . " ORDER BY TIME_STAMP"; 
    die($query); 
    $query = mysql_query($query, $CON) or die("_error_ " . mysql_error()); 
    if(mysql_num_rows($query) != 0) { 
    
    }else{ 
    ?> 
    <p>Currently no actions have taken place in your network.</p> 
    <?php 
    } 
    ?> 
    

    上面的代碼返回的SQL語句:

    SELECT (`actvbiz_networks`.`john_doe.REF`, `actvbiz_networks`.`Emmalene_Jackson.REF`) AS `REF`, (`actvbiz_networks`.`john_doe.TIME_STAMP`, `actvbiz_networks`.`Emmalene_Jackson.TIME_STAMP`) AS `TIME_STAMP` FROM `actvbiz_networks`.`john_doe`, `actvbiz_networks`.`Emmalene_Jackson`, `actvbiz_networks`.`act_web_designs` ORDER BY TIME_STAMP 
    

    我真的對我的腳學習與SQL。

    它不是PHP我有一個問題(我可以非常高興地用PHP代碼);這只是對SQL語句的幫助。

    任何幫助非常感謝。

    回答

    2

    沒有花時間通過你的代碼,但從聽起來像你想要聯合的問題。

    SELECT 
    3 AS a 
    UNION SELECT 
    2 AS a 
    UNION SELECT 
    1 AS a 
    ORDER BY a 
    

    給人

     
    a 
    = 
    1 
    2 
    3 
    

    編輯:所以,或許這樣的事情?

    DROP TEMPORARY TABLE IF EXISTS t1; 
    DROP TEMPORARY TABLE IF EXISTS t2; 
    DROP TEMPORARY TABLE IF EXISTS tmp; 
    
    CREATE TEMPORARY TABLE t1 (
    a INT(11) 
    ); 
    
    CREATE TEMPORARY TABLE t2 (
    b INT(11) 
    ); 
    
    INSERT INTO t1 VALUES (1), (2), (3); 
    INSERT INTO t2 VALUES (4), (5), (6); 
    
    CREATE TEMPORARY TABLE tmp 
    SELECT 
    b AS f 
    FROM t2 
    UNION SELECT 
    a AS f 
    FROM t1 
    ORDER BY f; 
    
    SELECT * FROM tmp; 
    

    回報

     
    f 
    = 
    1 
    2 
    3 
    4 
    5 
    6 
    
    +0

    我認爲你是在正確的路線,但輸出是不是我期待的。想象2個表格,完全相同的結構只是不同的表格名稱和數據。如果你知道我的意思,我想暫時將所有數據放入一張表中。 – 2010-06-16 06:41:45

    0

    你試過用view?這樣,您可以使用UNION作爲simendsjo建議,並且所有內容都放在一個表中。這不是一個臨時的解決方案,而是一個非常好的,乾淨而有效的方法。

    0

    我endeed了使用simendsjo的提示問題和使用UNION ALL

    <?php 
    $query = "SELECT `TALKING_TO` FROM `nnn_instant_messaging` WHERE `AUTHOR` = '" . DISPLAY_NAME . "' AND `TALKING_TO` != ''"; 
    $query = mysql_query($query, $CON) or die("_error_ " . mysql_error()); 
    if(mysql_num_rows($query) != 0) { 
        while($row = mysql_fetch_array($query)) { 
         $table_str = 'SELECT REF, ACTION, TIME_STAMP, DATA, IMAGE, DISPLAY_NAME FROM actvbiz_networks.' . $row['TALKING_TO'] . ' UNION ALL '; 
        } 
    }else{ 
        $table_str = ""; 
    } 
    $table_str = $table_str . 'SELECT REF, ACTION, TIME_STAMP, DATA, IMAGE, DISPLAY_NAME FROM actvbiz_networks.' . DISPLAY_NAME . ' ORDER BY TIME_STAMP DESC'; 
    
    $query = mysql_query($table_str, $CON) or die("_error_ " . mysql_error()); 
    if(mysql_num_rows($query) != 0) { 
        while($rows = mysql_fetch_array($query)) { 
    
    +0

    對,對不起。我忘了提及所有 – simendsjo 2010-06-17 07:37:21

    相關問題