例如,我有一个表“tbl_book”,其中包含100个或更多记录,如mysql“db_bookshop”中的book_name,book_publisher,book_author,book_rate等多个列。现在我想通过一次查询获取它们而不需要迭代100次而不是一次或两次循环。可能吗?有没有什么棘手的方法可以做到这一点。通常我们会做什么
$result = mysql_query("SELECT desire_column_name FROM table_name WHERE clause");
while( $row = mysql_fetch_array($result) ) {
$row['book_name'];
$row['book_publisher'];
$row['book_author'];
..........
$row['book_rate'];
}
// Or we may can use mysqli_query(); -mysqli_fetch_row(), mysqli_fetch_array(), mysqli_fetch_assoc();
我的问题是,我们有什么想法或任何棘手的方式 避免1oo次迭代获取1oo记录?这可能是有线的 一个人,但最有经验的程序员之一告诉我,这是 可能。但不幸的是,我无法向他学习。一世 为他感到难过,因为他已经不在了。感谢你的想法分享。
答案 0 :(得分:1)
您不应该使用mysql_query
不推荐使用mysql扩展名:
自PHP 5.5.0起,该扩展已弃用,自PHP 7.0.0起已被删除。
- https://secure.php.net/manual/en/intro.mysql.php
当您使用PDO时,您可以获取所有项目,而不会像这样
循环查询$connection = new PDO('mysql:host=localhost;dbname=testdb', 'dbuser', 'dbpass');
$statement = $connection->query('SELECT ...');
$rows = $statement->fetchAll();
答案 1 :(得分:0)
您是否尝试过使用mysql_fetch_assoc
?
$result = mysql_query("SELECT desire_column_name FROM table_name WHERE clause");
while ($row = mysql_fetch_assoc($result)) {
// do stuff here like..
if (!empty($row['some_field'])){
echo $row["some_field"];
}
}
答案 2 :(得分:0)
简短的回答 - NO ,没有循环就无法从数据库中获取多条记录。
但这里的问题是你不想要它。
“仅提取”数据毫无意义 - 你总是会对它做些什么。 每一行。显然,循环是对每一行做某事的自然方式。因此,试图避免循环是没有意义的 这使你的问题变得毫无意义。
关于表现。事实是,您遇到与从数据库中仅提取100条记录相关的非单一性能问题。这使你的问题成为一个虚构的问题。
我能想到的唯一可信的问题是你作为一名程序员的表现,因为缺乏教育会让你写下很多不必要的代码。如果您设法就此问题提出某个问题,您将会看到一种避免无用重复输入的方法。
答案 3 :(得分:0)
可以通过硬编码主列值来读取所有100条没有循环的记录,但这将涉及列出100 x列数,并且可以在MySQL中显示的列数有限制。 / p>
例如,
select
case when book_name='abc' then book_name end Name,
case when book_name='abc' then book_publisher end as Publisher,
case when book_name='abc' then book_author end as Author,
case when book_name='xyz' then book_name end Name,
case when book_name='xyz' then book_publisher end as Publisher,
case when book_name='xyz' then book_author end as Author,
...
...
from
db_bookshop;
这不实用,但如果您要查询的行数较少,则可能会发现它很有用。
答案 4 :(得分:0)
向MySQL服务器询问某事的时间远远大于通过客户端$(document).on('click', 'button.submit-btn', function () {
alert('Please wait...');
setTimeout(function() {
$('button.submit-btn').attr('disabled', true);
}, 50)
$('#send-form').ajaxForm(function() {
var currentAlert = $.jAlert('current');
currentAlert.closeAlert();
successAlert('Success!', 'The form has been submitted');
$('button.submit-btn').attr('disabled', false);
});
});
<form action="" method="post" id="send-form">
<button type="submit" class="submit-btn" name="send-modal-form" value="submit"></button>
</form>
循环的一次迭代。因此,为了提高性能,目标是让WHILE
在一次往返中转到服务器。不同的API调用会执行此操作或不执行此操作;阅读他们的详细信息。
我已经编写了很多关于MySQL的UI。我认为不会同时获取几十行,然后使用结果构建SELECT
(或其他内容)。我很少获取超过100,不是因为性能,而是因为100(通常)太多,用户无法接收单个网页。
另外,我认为发布几个,也许几十个查询以支持单个网页。延迟是微不足道的,特别是与用户阅读,消化和移动到下一页的时间相比。因此,我尝试向用户提供可消化的信息量,而无需点击其他页面以获得更多信息。有权衡。
如果让SQL执行“消化”操作是可行的,请执行此操作。 MySQL会更快地执行<table>
并返回总数,而不是返回几十行供客户端添加。这主要是带宽&#39;问题。无论哪种方式,MySQL都会(内部)获取所有需要的行。