$u_id=$event_assoc['Uniqueid'];
echo $u_id."\n";
$result1 = mysql_query("SELECT * FROM eventdetail WHERE unique_id = '$u_id'", $con1);
while($row = mysql_fetch_array($result1))
{
echo 'in eventdetail'."\n";
$e_id= $row['event_id'];
$destination= $row['destination'];
$uniqueid= $row['unique_id'];
$call_num= $row['channelid'];
}
echo mysql_num_rows($result1);
echo $e_id."\n";
echo $destination."\n";
echo $call_num."\n";
echo $uniqueid."\n";
if(mysql_num_rows($result1)>0)
{
echo 'calculate'."\n";
$result= mysql_query("SELECT sum(billsec)
FROM cdr
WHERE uniqueid = '$uniqueid'", $con2);
$bil = mysql_fetch_array($result);
$bill= (float) $bil['sum(billsec)'];
echo $bill."\n";
this is my code..
whenever i try to execute sum function query it retruns top row's billsec instead of addition of all row's billsec
You are doing a where on an unique ID in the sum query. Remove the where and it'll work
You are using unique id in your query.. And in a table single row will have that id, thats why you are getting top row's billsec... Remove the where clause in second query, and then check.
$result= mysql_query("SELECT sum(billsec)
FROM cdr
WHERE uniqueid = '$uniqueid'", $con2);
i guess there is a bug in this area...look again
The PHP statement for the SQL SUM Query should be:-
$result= mysql_query("SELECT sum(`billsec`), `uniqueid` FROM `cdr` GROUP BY `uniqueid` HAVING `uniqueid` = '$uniqueid'", $con2);
You need to use the clause "GROUP BY" whenever you are using any MySQL Aggregate functions (if needed). Also if you are using any aggregate functions (like "SUM", "MAX" etc), then you cannot use "WHERE" clause on the field (in this case, the field is "uniqueid") which is being used in the "GROUP BY" clause.
Hope it helps.
Related
I'm trying to get the latest info about some specific person, and I'm using a query like
SELECT * FROM Table WHERE Name LIKE 'Peter' ORDER BY ID DESC LIMIT 1
and
SELECT * FROM Table WHERE Name LIKE 'Mary' ORDER BY ID DESC LIMIT 1
because in the Table each day will insert new data for different person at the instant of updating it (for record reference), so I would like to print out a few persons latest info by "ORDER BY ID DESC LIMIT 1"
I have tried to print it out with "mysqli_multi_query" and "mysqli_fetch_row"
like
$con=mysqli_connect($localhost,$username,$password,'Table');
$sql = "SELECT * FROM Table WHERE Name LIKE 'Peter' ORDER BY ID
DESC LIMIT 1 ";
$sql .= "SELECT * FROM Table WHERE Name LIKE 'Mary' ORDER BY ID
DESC LIMIT 1";
// Execute multi query
if (mysqli_multi_query($con,$sql))
{
do
{
// Store first result set
if ($result=mysqli_store_result($con)) {
// Fetch one and one row
while ($row=mysqli_fetch_row($result))
{
echo '<tr>'; // printing table row
echo '<td>'.$row[0].'</td>';
echo '<td>'.$row[1].'</td>';
echo '<td>'.$row[2].'</td>';
echo '<td>'.$row[3].'</td>';
echo '<td>'.$row[4].'</td>';
echo '<td>'.$row[5].'</td>';
echo '<td>'.$row[6].'</td>';
echo '<td>'.$row[7].'</td>';
echo '<td>'.$row[8].'</td>';
echo '<td>'.$row[9].'</td>';
echo '<td>'.$row[10].'</td>';
echo '<td>'.$row[11].'</td>';
echo '<td>'.$row[12].'</td>';
echo '<td>'.$row[13].'</td>';
echo '<td>'.$row[14].'</td>';
echo'</tr>'; // closing table row
}
// Free result set
mysqli_free_result($result);
}
}
while (mysqli_next_result($con));
}
mysqli_close($con);
?>
In the result page , it doesn't show any error message , but no results are printed.
The individual queries were tested.
Please advise, much thanks
Is there another way to keep the query simple, so there is no need to use mysqli_multi_query?
Best practice indicates that you should always endeavor to make the fewest number of calls to the database for any task.
For this reason, a JOIN query is appropriate.
SELECT A.* FROM test A INNER JOIN (SELECT name, MAX(id) AS id FROM test GROUP BY name) B ON A.name=B.name AND A.id=B.id WHERE A.name IN ('Peter','Mary')
This will return the desired rows in one query in a single resultset which can then be iterated and displayed.
Here is an sqlfiddle demo: http://sqlfiddle.com/#!9/2ff063/3
P.s. Don't use LIKE when you are searching for non-variable values. I mean, only use it when _ or % are logically required.
This should work for you:
$con = mysqli_connect($localhost,$username,$password,'Table');
// Make a simple function
function personInfo($con, $sql)
{
$result = mysqli_query($con, $sql);
if(mysqli_num_rows($result) > 0)
{
while($row = mysqli_fetch_array($result))
{
echo '<table>
<tr>';
for($i=0; $i < count($row); $i++) echo '<td>'.$row[$i].'</td>';
echo '</tr>
</table>';
}
}
}
$sql1 = "SELECT * FROM Table WHERE Name='Peter' ORDER BY ID DESC LIMIT 1 ";
$sql2 = "SELECT * FROM Table WHERE Name='Mary' ORDER BY ID DESC LIMIT 1";
// Simply call the function
personInfo($con, $sql1);
personInfo($con, $sql2);
I am trying to count all rows within the column field_161. However, it just returns the value of 0. The connection to the database is successful and the table and row are spelled correctly.
Here's my code:
$conn->query("SELECT COUNT(*) FROM app_entity_21 WHERE field_161 = 30 as $mytotaltasks");
echo "test" . $mytotaltasks;
You can't just do AS $mytotaltasks in mysql, and turn it into a PHP variable. You'll need to get the result from the query. The simplest way is to use fetchColumn():
$query = $conn->query("SELECT COUNT(*) FROM app_entity_21 WHERE field_161 = 30");
$mytotaltasks = $query->fetchColumn();
I think you should add the Group By at then end of query string
$conn->query("SELECT COUNT(*) FROM app_entity_21 WHERE field_161 = 30 group by field_161");
echo "test" . $mytotaltasks;
Try this!
$result=$conn->query("SELECT COUNT(field_161)AS field_cont FROM app_entity_21 WHERE field_161 = 30 as $mytotaltasks");
$data_cont=mysqli_fetch_assoc($result);
echo "This is the number of rows". $data_cont['field_cont'];
or a little bit different:
$result=$conn->query("SELECT COUNT(field_161)AS field_cont FROM app_entity_21 WHERE field_161 = 30 as $mytotaltasks");
$data_cont=mysqli_fetch_object($result);
echo "This is the number of rows". $data_cont->field_cont;
I am trying to retrieve the last ID from the database and increment it by one. My problem is that I am not able to retrieve it in a particular category. For instance, I have categories with a string value of A, B and C. The category with a string value of A will return only id starting from 1 as 10001, 10002 and the last ID to be retrieved is 10002 plus 1 so that the ID to be displayed is 10003.
Category "B" will return 20002 and category "C" will return 30002.
Here is my code:
<?php
$con = mysql_connect("server","username","password","db_name") or die (mysql_error());
mysql_select_db($con, 'db_name');
$sql = "Select `id` from `tbl_violation` WHERE `category` = 'A' ORDER BY `category` DESC LIMIT 1";
$result = mysql_query ($sql,$con);
while($row = mysql_fetch_array($result, $con))
{
$i = $row['id'];
$i++;
echo "DLR - " .$i;
}
?>
The error is this:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in ...
Notice: Undefined variable: i in ...
First I must say again... Stay away from mysql_connect() and all other mysql_* functions. If you want a simple fix, just replace it with mysqli_ functions and make sure you escape ALL user provided input. A bit of reading But I would recommend to look into PDO.
That out of the way, your MYSQL problem is easy. You want to GROUP the elements so all the rows with same category column are groupped together and then select the maximum for each group. Your SQL would then be:
SELECT category, MAX(id) AS highest_id FROM tbl_violation GROUP BY category;
see this fiddle I made with a similar table.
You can then access the results you get from mysqli_query function the same way you do now...
while($row = mysqli_fetch_array($result, $con))
{
$i = $row['highest_id'];
$i++;
$category = $row['category'];
echo "$category - $i";
}
You can use SELECT MAX to get the highest id. I am assuming that id is not unique. If so, remove the WHERE statement from the query. Try the following.
<?php
$con = mysql_connect("server","username","password","db_name") or die (mysql_error());
mysql_select_db("database");
$sql = "Select MAX(`id`) from `tbl_violation` WHERE `category` = 'A";
$result = mysql_query ($sql,$con);
while($row = mysql_fetch_array($result))
{
$i = $row['id'];
echo "DLR - " .$i++;
}
?>
Also I would like to add that I agree with flynorc. Use PDO or mysqli.
Use
ORDER BY `id` DESC
Instead of
ORDER BY `category` DESC
MYSQL I would like to retrieve a value of a field in columnX where a field value for columnY is specified. There maybe more than one row where this occurs but the first one will do. it would be excellent if you could provide the php. Thanks
Try this SQL:
SELECT `columnX` FROM `table` WHERE `columnY` = $value LIMIT 1
In PHP:
$query = $mysqli->query("SELECT `columnX` FROM `table` WHERE `columnY` = $value LIMIT 1");
$row = $query->fetch_assoc();
echo $row['columnX'];
IF you want to do it in sql you can use the IF condition like :
SELECT IF(X=0,Y,1) As cond FROM table
In PHP:
$query = $mysqli->query('SELECT IF(X=0,Y,1) As cond FROM table');
$row = $query->fetch_assoc();
echo $row['cond'];
thanks to "Daniel Li"
<?php
include "config.php";
$query = "SELECT SUM(total) FROM sales WHERE date = CONCAT(DATE_SUB(curdate(), INTERVAL 2 DAY),' ','00:00:00')";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
echo $row['total'];
echo mysql_error();
?>
I have also tried echoing the $row variable without the array and it would display "Array" on the screen. Basically the result of the query should output a number and it's not doing so currently.
Because its the sum of total, its no longer referred to as $row['total'].
Try $row[0]
:)
first alter your query to this
$query = "SELECT SUM(total) as total FROM sales WHERE date = CONCAT(DATE_SUB(curdate(), INTERVAL 2 DAY),' ','00:00:00')";
use
mysql_fetch_assoc()
instead of
mysql_fetch_array()
First of all the resulting column does to have an explicit name, so you should name it first:
$query = "SELECT SUM(total) as total FROM sales WHERE ...
You should use quotes to reference the column:
$row["total"]