SQL(MySQL + PHP) 查询,查询排名,表内一个人多条数据,查出最大的那条排名,请问!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL(MySQL + PHP) 查询,查询排名,表内一个人多条数据,查出最大的那条排名,请问!相关的知识,希望对你有一定的参考价值。
现在表里的大概的情况是这样的:
id name score date round
1 abc 100 2012-11-12 1
2 abc 105 2012-11-13 1
3 abc 108 2012-11-14 1
4 opq 159 2012-11-13 1
5 opq 180 2012-11-14 1
6 opq 182 2012-11-15 1
7 abc 132 2012-11-15 1
8 bbb 201 2012-11-11 2
9 eee 199 2012-11-11 1
10 eee 200 2012-11-14 1
也就是说,表中有多人、多天、多轮(round)的分数,现在要查询特定的一轮的最高分人名排名,比如我就想知道第一轮(round = 1) 的排名,也就是想要查询前三名:
eee 200
opq 182
abc 132
(也就是每个人只保留最高结果,像是 eee 的199分,虽然排名第二,但是不被查询出来,因为eee有200分,更高)
请问怎么写?谢谢!!!
select * from 你的表名 order by score desc limit 3
如果只要查name score的话。则是:
select name,score from 你的表名 order by score desc limit 3
说明:order by score desc -----按score降序排序
limit 3取3条数据。追问
这样首先没有区分 round,就是没有确定是哪一轮。
第二个问题更关键,就是可能出现
eee 200
eee 199
opq 182
的情况,我不想让 eee 出现两次,只要一次。
只要出现一次的话可以使用这样写:
select *,count(distinct name),max(score) from 表名 group by name order by max(score) desc limit 3
其中你的值是最后一项max(score)
distinct就是去除重复的。
+------+-------+-------+
| name | score | round |
+------+-------+-------+
| eee | 200 | 1 |
| opq | 182 | 1 |
| abc | 132 | 1 |
+------+-------+-------+
是这个效果不? 参考技术B 这个好写
用分组
按name来分组
取最多的score
取出前三条追问
啊谢谢,能具体讲讲吗?我是新手啊!如果能具体讲讲绝对把悬赏分给你啦!
追答你看我在乎你那点悬赏吗?
参考技术C select * from table-name where round = 1 group by name order by score desc limit 3从数据数组(php,mysql)编写循环sql查询
【中文标题】从数据数组(php,mysql)编写循环sql查询【英文标题】:Write loop sql query from data array (php, mysql) 【发布时间】:2015-11-07 09:58:46 【问题描述】:我的 php 脚本有问题。
我有一个数组,它是从表单生成的,其中$_POST['store']
是一个来自 jQuery 表单的数组,具有添加多行的功能:
Array
(
[client] =>
[darvad] =>
[owca] =>
[ldrive] =>
[store] => Array
(
[product] => Array
(
[0] => 430
[1] => 440
[2] => 430
)
[quantity] => Array
(
[0] => 123
[1] => 1223
[2] => 232
)
[segums] => Array
(
[0] => Mixed park
[1] => Light vehicle
[2] => Trucks
)
[deadline] => Array
(
[0] => 2015-08-04
[1] =>
[2] =>
)
[renewal] => Array
(
[0] => 1
)
)
)
我需要从这个数组中获取值到 sql 插入语句中并循环它。
$sql_rec = "INSERT INTO tsales_funnel_mrecord (product, quantity, segums, deadline)
VALUES (...),(...),(...)....
";
HTML 代码:
<div id="container">
<div id="content" role="main">
<?php
echo "<pre>";
print_r($_POST);
echo "</pre>";
?>
<form action="<?= $_SERVER['REQUEST_URI'] ?>" method="post" id=multiForm>
<label for="client">Klients: *</label><input id="client" type="text" name="client" placeholder="Reg.nr | Pk.kods" value="" /></br>
<label for="selector1">Darījuma vadītājs: *</label>
<select id="selector1" name="darvad" >
<option value="">-Dar. vadītājs-</option>
<?php
$sql = "SELECT Vards_Uzvards, Tables_ID FROM users";
$results = $wpdb->get_results($sql); // return an object, not ARRAY_N
if ($results)
foreach ($results as $row)
echo "<option value = '".$row->Tables_ID."'>".$row->Vards_Uzvards."</option>";
echo "</select></br>";
?>
<label for="owcafind"><a href="<?php echo site_url('/sample-page/owca/'); ?>" target="_blank">Meklēt OWCA kodu:</a> *</label><input id="owcafind" type="text" name="owca" placeholder="OWCA Kods (8)" value="" /></br>
<label for="ldrive">Mape L diskā:</label><input id="ldrive" type="text" name="ldrive" placeholder="Mape L diskā" value="" /></br>
Produkti: <a href="#" class="addRow"><img src="<?php echo site_url('/img/plus-icon.png'); ?>" ></a><br/>
<table class="multi">
<!-- table title -->
<tr><th>Produkts</th><th>Vienību skaits</th><th>Riska segums:</th><th>Deadline:</th><th>Atjaunojums</th><th>[Option]</th></tr>
<!-- row template, when added new row -->
<tr style="display:none;" class="templateRow">
<td><select name="store[product][]">
<option value="" selected="selected">-Produkts-</option>
<option value="430">OCTA</option>
<option value="440">KASKO</option>
</select></td>
<td><input type="text" name="store[quantity][]" /></td>
<td><select name="store[segums][]">
<option value="" selected="selected">-Riska segums-</option>
<option value="Mixed park">Mixed park</option>
<option value="Light vehicle">Light vehicle</option>
<option value="Trucks">Trucks</option>
<option value="Buss">Buss</option>
</select></td>
<td><input type="date" name="store[deadline][]" class="datepicker" /></td>
<td><input type="checkbox" name="store[renewal][]" value="1" /></td>
<td><a class="del" href="#"><img src="<?php echo site_url('img/minus-icon.jpg'); ?>" ></a></td>
</tr>
<!-- default values -->
<tr>
<td><select name="store[product][]" >
<option value="" selected="selected">-Produkts-</option>
<option value="430">OCTA</option>
<option value="440">KASKO</option>
</select></td>
<td><input type="text" name="store[quantity][]" /></td>
<td><select name="store[segums][]">
<option value="" selected="selected">-Riska segums-</option>
<option value="Mixed park">Mixed park</option>
<option value="Light vehicle">Light vehicle</option>
<option value="Trucks">Trucks</option>
<option value="Buss">Buss</option>
</select></td>
<td><input type="date" name="store[deadline][]" class="datepicker" /></td>
<td><input type="checkbox" name="store[renewal][]" value="1" /></td>
<td></td>
</tr>
<!-- /default values -->
</table>
【问题讨论】:
那么你尝试的结果是什么?任何可以帮助我们的错误消息? 数据是如何存储的? "VALUES (...),(...),(...).... ";" - 这可能只是一个大长字符串中的 "0, 1, 2, 3, 4" 的值? 表单看起来像:s12.postimg.org/t4shn4mml/form_example.png @АлексИльин 检查我答案中的底部示例。应该涵盖这个。 【参考方案1】:如果 Array 被称为 $array,那么您可以像这样访问数组值;
// product;
$array['store']['product'];
// quantity;
$array['store']['quantity'];
// etc.
然后,如果他们要进入单个列(这是不好的形式,我不推荐,那么你可以这样做;
// product;
$prod_string = '';
foreach ($array['store']['product'] as $key => $prod)
$prod_string .= $prod;
然后您可以在查询中使用$prod_string
。
或者,如果您需要为每个键插入一行;
// We use the key from the product loop to get the others;
foreach ($array['store']['product'] as $key => $prod)
$prod_val = $prod;
$qty_val = !empty($array['store']['quantity'][$key]) ? $array['store']['quantity'][$key] : '';
$seg_val = !empty($array['store']['segums'][$key]) ? $array['store']['segums'][$key] : '';
$dl_val = !empty($array['store']['deadline'][$key]) ? $array['store']['deadline'][$key] : '';
// Right here create your query and insert.
$sql_rec = "INSERT INTO tsales_funnel_mrecord (product, quantity, segums, deadline) VALUES ($prod_val, $qty_val, $seg_val, $dl_val);"
// I'm not sure what library you're using for your db management, so will leave that out.
然后你将拥有每个的价值。
注意 - 我没有检查干净的帖子值。即,净化输入。这超出了这个问题的范围。
【讨论】:
尝试运行您的代码,出现错误:警告:为 foreach() 提供的参数无效 也许你应该用你正在运行的确切代码来更新你的问题。请记住,警告不是错误,代码执行不会停止。 我已经用 html 代码更新了我的问题。我试过插入 $array = $_POST;在你的代码之前。几乎完成了。有错误:INSERT INTO tsales_funnel_mrecord (Product_type, Vien_skaits, Riska_segums, Deadline) VALUES (440, 2321, Light vehicle, 2015-08-07);您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“车辆,2015-08-07)”附近使用正确的语法 虽然我的代码在查询中可能存在问题,但我真的建议您搜索堆栈溢出以查找有关将帖子数据插入数据库的问题。我担心你会插入未经处理的数据。你真的在问一个完整的方法,这一切都已经涵盖了。 已完成代码,我将其发布为答案。感谢您的帮助!【参考方案2】:从你的问题看来,这就是你所追求的
$itemCount = sizeof($array['store']['product']);
for ($i = 0; $i < $itemCount; $i++)
$sql_rec = "INSERT INTO tsales_funnel_mrecord (product, quantity, segums, deadline) VALUES ("' . $array['store']['product'][$i] . '", "' . $array['store']['quantity'][$i] . '", "' . $array['store']['segums'][$i] . '", "' . $array['store']['deadline'][$i] . '");";
// Run the sql statement on the database here
在存储到数据库之前,您需要确保所有用户提供的值都已正确转义。
【讨论】:
我有一个错误,$itemCount 返回 0,并且代码不起作用。 确保用户提供的数据被转义。使用准备好的语句:)【参考方案3】:已经做到了:
if ($_SERVER['REQUEST_METHOD'] == 'POST')
// We use the key from the product loop to get the others;
$array = $_POST;
$itemCount = sizeof($array['store']['product']);
// Loop through all $itemCount
$values_string = '';
for ($i = 0; $i < $itemCount; $i++)
$prod = esc_sql($array['store']['product'][$i]);
$quant = esc_sql($array['store']['quantity'][$i]);
$seg = esc_sql($array['store']['segums'][$i]);
$deadline = esc_sql($array['store']['deadline'][$i]);
$renewal = esc_sql($array['store']['renewal'][$i]);
if ($i < $itemCount - 1)
$new_str = "('".$prod."','".$quant."','".$seg."','".$deadline."','".$renewal."'),";
else
$new_str = "('".$prod."','".$quant."','".$seg."','".$deadline."','".$renewal."');";
$values_string .= $new_str;
// Run the sql statement on the database here
$sql_rec = "INSERT INTO tsales_funnel_mrecord (Product_type, Vien_skaits, Riska_segums, Deadline, Atjaunojums) VALUES $values_string";
$wpdb->query($sql_rec);
【讨论】:
正如我在回答中的 cmets 中所说,esc_sql() 无法防止注入攻击。以上是关于SQL(MySQL + PHP) 查询,查询排名,表内一个人多条数据,查出最大的那条排名,请问!的主要内容,如果未能解决你的问题,请参考以下文章