相关疑难解决方法(0)

SELECT* - 优点/缺点

我总是从SQL专家那里听说在SELECT语句中使用'*'符号效率不高,最好列出所有字段名称.

但是,在向表中添加新字段然后相应地更新所有存储过程时,我发现对我个人而言并不高效.

那么使用'*'有什么优缺点?
谢谢.

sql select

6
推荐指数
2
解决办法
601
查看次数

Codeigniter:加入3个表并在视图中显示数据

所以我想加入3张桌子.

我正在构建一个app i Codeigniter,我有3个表

客户:
-id
-phone_number
-hospital_id
-smc_status
-testing_center_id

医院
-id
-name

Testing_center
-id
-name

在模型中,我有这个:

public function get_clients()
    {
        if($slug === FALSE)
        {
            $this->db->select('clients.*');
            $this->db->from('clients');
            $this->db->join('hospital', 'clients.id = hospital.id');
            $this->db->join('testing_center', 'clients.id = testing_center.id');
            $query = $this->db->get();

            return $query->result_array();
        }

        $query = $this->db->get_where('clients');
        return $query->row_array();
    }
Run Code Online (Sandbox Code Playgroud)

在视图中我有:

<tbody>
    <?php foreach ($clients as $client_item): ?>
    <tr>
        <td><?php echo $client_item['phone_number'] ?></td>
        <td><?php echo $client_item['smc_status'] ?></td>
        <td><?php echo $client_item['hospital_id'] ?></td> //i wish to have the hospital name here
        <td><?php echo $client_item['testing_center_id'] ?></td> …
Run Code Online (Sandbox Code Playgroud)

php codeigniter

5
推荐指数
1
解决办法
5025
查看次数

具有唯一结果行的MYSQL JOIN

假设我有2个表,一个叫做类别,一个叫做cat_pages.

类别表具有列ID,标题和时间戳.例如:

CREATE TABLE categories (
    id INT UNSIGNED PRIMARY KEY,
    title VARCHAR(32),
    `timestamp` TIMESTAMP,
    INDEX (title)
) Engine=InnoDB;
Run Code Online (Sandbox Code Playgroud)

cat_pages有2列,cat_id和page_id:

CREATE TABLE cat_pages (
    cat_id INT UNSIGNED 
        REFERENCES categories (id) 
        ON DELETE CASCADE ON UPDATE CASCADE,
    page_id INT UNSIGNED
        REFERENCES pages (id) 
        ON DELETE CASCADE ON UPDATE CASCADE,
    UNIQUE INDEX (cat_id, page_id),
    INDEX (page_id, cat_id),
) Engine=InnoDB;
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用ID上的cat_pages表加入类别表,这样就可以了

  1. 仅检索category_pages表中具有id的类别
  2. 每个类别仅在结果集中显示一次

查询:

SELECT * FROM categories as c
    LEFT JOIN cat_pages as p ON c.id = p.cat_id
Run Code Online (Sandbox Code Playgroud)

生成一个重复多次类别的结果集(因为cat_pages表中有多个匹配项.我需要什么才能使每个类别只显示一次,如果cat_pages表中没有匹配则根本不显示?

mysql sql join

4
推荐指数
1
解决办法
2万
查看次数

视图 - 如果在按查询分组中找不到行,则返回0

假设我有以下MySQL视图:

create or replace view total_transactions(account_id, total) as
select
  t.account_id,
  ifnull(sum(t.value), 0) as total
from transactions t
where t.paid IS TRUE
group by t.bank_account_id;
Run Code Online (Sandbox Code Playgroud)

假设该帐户还没有任何交易,我希望该视图返回0.现在,如果我选择如下:

select * from total_transactions where account_id = 2060;
Run Code Online (Sandbox Code Playgroud)

并且帐户2060没有任何交易,它将不返回任何内容,而不是0.

我怎么能解决这个问题?

提前致谢.


编辑

我认为这可能是group by......

如果我执行我正在用于没有group by的视图的查询,它可以工作(即使没有结果也返回0),但如果我使用group by它,则为null:

select
  t.account_id,
  ifnull(sum(t.value), 0) as total
from transactions t
where t.paid IS TRUE
and account_id = 2060;
Run Code Online (Sandbox Code Playgroud)

返回0,和

create or replace view total_transactions(account_id, total) as
select
  t.account_id,
  ifnull(sum(t.value), 0) as total
from …
Run Code Online (Sandbox Code Playgroud)

mysql view

4
推荐指数
1
解决办法
1万
查看次数

如何选择*并重命名​​列?

我可以轻松地从表中选择我的所有列:

SELECT * FROM foo
Run Code Online (Sandbox Code Playgroud)

但是,如果我要重命名的列barfoobar,我需要手动指定的所有字段.如果向表中添加了新列,这会使我的查询不健壮:

SELECT a,b,c,d,bar AS foobar FROM foo
Run Code Online (Sandbox Code Playgroud)

是否有可能写出类似的东西

SELECT *, bar AS foobar from foo
Run Code Online (Sandbox Code Playgroud)

mysql sql

4
推荐指数
1
解决办法
3274
查看次数

Sql通配符:性能开销?

我用Google搜索了这个问题,似乎无法找到一致的意见,或许多基于可靠数据的意见.我只想知道在SQL SELECT语句中使用通配符是否会产生额外的开销,而不是单独调用每个项目.我已经在几个不同的测试查询中比较了两者的执行计划,似乎估计总是读取相同的.是否有可能在其他地方产生一些开销,或者它们是否真的处理相同?

我具体指的是:

SELECT *
Run Code Online (Sandbox Code Playgroud)

SELECT item1, item2, etc.
Run Code Online (Sandbox Code Playgroud)

sql performance wildcard overhead sql-execution-plan

3
推荐指数
1
解决办法
1827
查看次数

当只需要`field`时,什么是更快的SELECT*或SELECT`field`

我不想在这里假设,我以前被咬过/证明错了.

任何帮助,将不胜感激

mysql sql

3
推荐指数
2
解决办法
2017
查看次数

哪个复合索引会使这个简单的MySQL查询更快?

哪个复合索引可以使这个简单的MySQL查询更快,我将如何创建该复合索引?

SELECT * 
FROM  `Table1` 
WHERE  `col1` =  '145307'
AND  `col2` =  '0'
AND col3 NOT 
IN ( 130209, 130839 ) 
ORDER BY col4 DESC 
LIMIT 0 , 5
Run Code Online (Sandbox Code Playgroud)

上面(col1to col4)的每列上都有一个单独的索引.


编辑:

结果SHOW CREATE TABLE:

CREATE TABLE `Table1` (  
 `primaryCol` int(11) NOT NULL AUTO_INCREMENT,
 `col3` int(11) DEFAULT '0',
 `col5` varchar(20) COLLATE utf8_bin DEFAULT NULL,
 `col1` int(11) DEFAULT '0',
 `col6` varchar(80) COLLATE utf8_bin DEFAULT NULL,
 `col7` text CHARACTER SET …
Run Code Online (Sandbox Code Playgroud)

mysql indexing query-optimization composite-index

3
推荐指数
1
解决办法
3520
查看次数

有没有一种简单的方法从PHP中的SQL时间戳获取Unix时间戳?

我的数据库表有一个包含SQL时间戳的列(例如,2009-05-30 19:43:41).我需要在我的php程序中使用Unix时间戳等效(整数).

$posts = mysql_query("SELECT * FROM Posts ORDER BY Created DESC");
$array = mysql_fetch_array($posts);
echo $array[Created];
Run Code Online (Sandbox Code Playgroud)

它现在回应SQL时间戳,我想要一个Unix时间戳.是否有捷径可寻?

php mysql sql timestamp

1
推荐指数
1
解决办法
557
查看次数

PHP PDO - 可以连接但查询不起作用

我想摆脱旧 mysql 扩展的束缚,我只是对数据库中的表进行测试 PDO 连接和简单查询。我似乎能够连接,(“连接成功”回声)但这就是美好时光结束的地方。我现在花了太多时间试图开始使用 PDO。

<?php
$host = 'localhost';
$port = '3306'; 
$username = 'user';
$password = 'blabla';
$database = 'workslist';

try {
    $db = new PDO("mysql:host=$host; port = $port; dbname = $database", $username, $password);
    echo 'connection successful<br />';

    $query = 'SELECT * FROM main';
    $statement = $db->prepare($query);
    $statement->execute();
    $results = $statement->fetchAll();
    $statement->closeCursor();      

    foreach($results as $r){
            echo $r['work'] . '<br />';
    }

} catch (PDOException $e) {
    echo 'Error!: ' . $e->getMessage() . '<br />';
    die();
} 
?>
Run Code Online (Sandbox Code Playgroud)

以上有什么问题吗? …

php pdo

1
推荐指数
1
解决办法
7751
查看次数