【问题标题】:Is it possible to select certain elements of the database table?是否可以选择数据库表的某些元素?
【发布时间】:2014-02-09 05:33:56
【问题描述】:

例如:我有一个名为 tbl_admin 的表,并且该表中有很多表元素。

Like(id、fname、lname、contact_info、email、ip、date、status等最多20个元素)。

现在我只需要从该表中排除 3 个元素,如您所说(fname、lname 和 contact_info)并选择所有其他元素。这可以通过使用 mysql 查询来实现吗?

如果可能,请帮助我。谢谢,

【问题讨论】:

  • 不,你不可能写下你想选择的所有字段

标签: php mysql sql


【解决方案1】:

简答 您不能显式地排除列,但可以通过仅选择其他列隐式地这样做:

SELECT
    ID,
    EMAIL,
    IP,
    DATE,
    STATUS
FROM tbl_admin

长答案 事实证明我的简短回答错了,从技术上讲,有一种方法如问题here 所示。

要在 PHP 中执行此操作,我建议在 MySQL 数据库中创建一个封装 SQL 的视图。然后,您只需从该视图中选择 *。

或者,您可以创建一个存储过程,并传入要过滤掉的列的名称。

【讨论】:

    【解决方案2】:

    试试:

    $result = mysql_query("SHOW COLUMNS FROM tbl_admin");
    
    if (mysql_num_rows($result) > 0) {
        while ($row = mysql_fetch_assoc($result)) {
            $columns[] = $row['Field'];
        }
    }
    //fill all columns here that you want to exclude
    $columns_to_exclude = array('fname','lname','contact_info'); 
    $sql = "SELECT (";
    foreach($columns as $ind=>$val){
    
        if(!in_array($val,$columns_to_exclude))
        {
            $sql .= $val.", ";
        }
    }
    $sql = rtrim($sql,", ");
    $sql .= ") FROM tbl_admin;";
    
    echo $sql;
    

    【讨论】:

      【解决方案3】:
      Select fname,sname,contact from table_admin
      

      【讨论】:

      • 对不起,我的错误。我想排除这些字段
      【解决方案4】:

      是的,所以你会有这样的东西:

      SELECT
          id,
          fname,
          lanem
      FROM
          tbl_admin
      

      您只需要指定它们是什么以及按什么顺序。而不是使用* 以默认顺序获取所有记录(列)。

      编辑

      SET @sql = CONCAT('SELECT ', (SELECT REPLACE(GROUP_CONCAT(COLUMN_NAME), '<columns_to_omit>,', '') FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '<table>' AND TABLE_SCHEMA = '<database>'), ' FROM <table>');
      
      PREPARE stmt1 FROM @sql;
      EXECUTE stmt1;
      

      实际上,我只是从其他人的帖子中得到的,所以所有的功劳都归他所有。 HERE

      【讨论】:

      • 对不起,我的错误。我想排除这些字段
      • 好的。在一些帖子上找到它,但我和其他许多人认为这不是一个好习惯。
      【解决方案5】:

      最新答案

      Mahomedalid 回复 Select all columns except one in MySQL?

      SET @sql = CONCAT('SELECT ', (SELECT REPLACE(GROUP_CONCAT(COLUMN_NAME), '<columns_to_omit>,', '') FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '<table>' AND TABLE_SCHEMA = '<database>'), ' FROM <table>');
      
      PREPARE stmt1 FROM @sql;
      EXECUTE stmt1;
      

      根据您的情况,将 &lt;columns_to_omit&gt; 替换为 fname,lname,contact_info

      旧答案

      从表中检索特定列值的语法是

      SELECT column_name(s)
      FROM table_name
      

      可以使用SELECT * 而不是SELECT column_name(s) 检索所有列

      如果您将问题指向特定语言,例如 PHP,那么语法可以是这样的

      <?php
      $con=mysqli_connect("localhost","username","password","database");
      // Check connection
      if (mysqli_connect_errno())
        {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
        }
      
      $result = mysqli_query($con,"SELECT fname,lname,contact_info FROM tbl_admin");?>
      

      【讨论】:

      • 我只想排除 3 列,因为我有 20 多列,我不想选择所有其他字段
      • 我有超过 30 个字段,所以我不能输入 select (column1,column2,column3,column4,column5.....column30)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-23
      • 1970-01-01
      • 2021-08-10
      • 1970-01-01
      • 2015-10-15
      • 1970-01-01
      相关资源
      最近更新 更多