Count function in mysql - php

There are 2 table called employee and approvedcadre.I want to get count of raws where
employee.Des_name=approvedcadre.Des_name
AND employee.service=approvedcadre.service
AND employee.Grade=approvedcadre.Grade
AND employee.SalaryCode=approvedcadre.SalaryCode
WHERE app_category='permanent'"
FROM approvedcadre
WHERE Ins_name='$InsName'
I herewith attached the current code.but I don't know how to apply "SELECT * FROM approvedcadre WHERE Ins_name='$InsName' to the query?
[Above mentioned code]

try this code it for count the rows
in php use * and use mysqli_num_rows
SELECT COUNT(*)
FROM approvedcadre
JOIN employee ON employee.Des_name=approvedcadre.Des_name
AND employee.service=approvedcadre.service
AND employee.Grade=approvedcadre.Grade
AND employee.SalaryCode=approvedcadre.SalaryCode
WHERE approvedcadre.Ins_name='$InsName' and approvedcadre.app_category='permanent'"

Related

php pg_fetch_array only show first result

i query to check if a point(input) is intersect with polygons in php:
$sql1="SELECT ST_intersects((ST_SetSRID( ST_Point($startlng, $startlat),4326))
, zona_bahaya.geom) as intersek
FROM zona_bahaya";
$query1 = pg_query($conn,$sql1);
$check_location = pg_fetch_array($query1);
if (in_array('t',$check_location)) {
dosemthing1;}
else {dosomething2;}
it's work peroperly before i update the data
after data updated, it's only show the first row when i check the pg_fetch_array result. here is the result {"0":"f","intersek":"f"} .
i try to check from pgadmin and it's can show 8 result (1 true(intersected) and 7 false(not intersect)) using updated data with this query:
SELECT ST_intersects((ST_SetSRID( ST_Point(110.18898065505843, -7.9634510320131175),4326))
, zona_bahaya.geom) as intersek
FROM zona_bahaya;
to solve it, i order the query result descended so the 'true' gonna be the first like this:
order by intersek desc
anybody can help me to findout way it just only show the first row???
here some geom from STAsText(zonabahaya.geom) not all of them : MULTIPOLYGON(((110.790892426072 -8.19307615541514,110.791999687385 -8.19318330973567,110.794393723931 -8.1927980624753,110.794586347561 -8.19205508561603,110.795329324421 -8.19120203811094,110.796540101525 -8.19023891996003,110.797503219676 -8.18933083713203,110.798576408472 -8.18919324882476,110.79929186767 -8.18957849608512,110.800337538805 -8.19059664955894,110.800585197758 -8.19150473238694,110.80022746816 -8.19238529755349,110.799787185576 -8.19290813312112,110.799589319279 -8.19300706626968,110.798788231202 -8.19299429992581,110.798537293576 -8.19311976873883,110.79850269889 -8.1933090511224,110.798620939451 -8.19433728092441)))
In order to filter only the records that intersect you have to use ST_Intersects in the WHERE clause:
SELECT *
FROM zona_bahaya
WHERE ST_Intersects(ST_SetSRID(ST_Point(110.18, -7.96),4326),zona_bahaya.geom);
Since you're dealing with points and polygons, perhaps you should take a look also at ST_Contains.
In case you want to fetch only the first row you must set a limit in your query - either using LIMIT 1 or FETCH FIRST ROW ONLY -, but it would only make sense combined with a ORDER BY, e.g.
SELECT *
FROM zona_bahaya
JOIN points ON ST_Intersects(points.geom,zona_bahaya.geom)
ORDER BY gid
FETCH FIRST ROW ONLY;
Demo: db<>fiddle

Yii2 : how to use distinct , groupby , sum and where conditions

I want execute below query in using Yii2 syntax selection query,
select distinct pfs_id, unitprice, sum(qty)
from order_items
where order_id= id
and item_farm_id = id
group By pfs_id
I tried several times but still not getting luck,
Please any one help.
Below query return you desire result as array.
$data=ModelName::find() //replace your model name here
->select('distinct(pfs_id),unitprice,sum(qty)')
->where(['order_id'=>id,'item_farm_id'=>id])
->groupBy('pfs_id')
->asArray->all();
You can also use alias:
$data=ModelName::find()
->select('distinct(pfs_id) as pfs_id,unitprice,sum(qty) as sum_of_qty')
->where(['order_id'=>id,'item_farm_id'=>id])
->groupBy('pfs_id')
->asArray->all();

Checking if there are duplicates in a tables

Hello I have been working on an sql code I found online that said that it check if there duplicates online.
What I want to do is that it checks whether if a value has a duplicate in the table it is inserting then I need to return a booleon in PHP but I am having a problem in MYSQL code. I have this code I have found online:
SELECT schedday,schedtime COUNT(schedday, schedtime) as count
FROM scstock
GROUP BY schedday, schedtime
HAVING COUNT(schedday, schedtime) > 1
But I am having this error
Then I tried to modify it to this which is I wanted to accomplish
SELECT schedday,schedtime COUNT(schedday, schedtime) as count
FROM scstock
WHERE schedday = 'M/T' AND schedtime = '7:00-9:00/7:00-9:00'
HAVING count > 1
But this appears
Can you help me?
Try this below query for your result
SELECT schedday,schedtime, COUNT(*) as count FROM scstock GROUP BY schedday, schedtime HAVING count > 1
you have syntax error you should put an "," after schedtime
SELECT schedday,schedtime , COUNT(schedday, schedtime) as count
FROM scstock
GROUP BY schedday, schedtime
HAVING count > 1

How to get Max date with selected row id in Mysql

I have a scenario in which i want to get Maximum Date but not from Whole Table Just from Selected id but i failed.
Here is my table
I run This Query For get my selected id
SELECT * FROM `tbl_methodology` WHERE FIND_IN_SET(6, `col_select_corporate`)
and i got that result
From that result I want to get that record which have maximum Date
I try that query but it not working for me
SELECT * FROM `tbl_methodology` WHERE id IN (1,5,7) AND `col_date` = (
SELECT MAX(`col_date`)
FROM `tbl_methodology`)
Can anyone help me??
Add the where clause twice and you should get the result you expected:
SELECT * FROM `tbl_methodology` WHERE id IN (1,5,7) AND `col_date` = (
SELECT MAX(`col_date`)
FROM `tbl_methodology` WHERE id IN (1,5,7))
And as i commented: it is very bad db design, to save values as CSV

MySQL JOIN pass PHP variable to two tables

I have the following MySQL query in PHP that passes a variable to complete the query:
SELECT * from mobile_tech WHERE uid=$uid order by timestamp DESC limit 0,1
I have the following MySQL JOIN that provides data from two tables:
SELECT mobile_tech.latitude, mobile_tech.longitude, mobile_tech.timestamp, mobile_tech.uid, gbl_qemplisting.EmpNo, gbl_qemplisting.FirstName, gbl_qemplisting.LastName
FROM mobile_tech, gbl_qemplisting
WHERE mobile_tech.uid=gbl_qemplisting.EmpNo AND date(timestamp)='$currentday'
group by uid
I need to combine these two queries into one with a JOIN and still passing the $uid variable to complete the query.
I've tried the following and it did not work:
SELECT mobile_tech.latitude, mobile_tech.longitude, mobile_tech.timestamp, mobile_tech.uid, gbl_qemplisting.EmpNo, gbl_qemplisting.FirstName, gbl_qemplisting.LastName
FROM mobile_tech, gbl_qemplisting
WHERE mobile_tech.uid=$uid AND gbl_qemplisting.EmpNo=$uid AND date(timestamp)='$currentday'
Your query will return a cross product between the mobile_tech and gbl_emplisting rows for $uid. If you just want one row, as in the first query, use ORDER BY and LIMIT similarly.
SELECT mobile_tech.latitude, mobile_tech.longitude, mobile_tech.timestamp, mobile_tech.uid, gbl_qemplisting.EmpNo, gbl_qemplisting.FirstName, gbl_qemplisting.LastName
FROM mobile_tech, gbl_qemplisting
WHERE mobile_tech.uid=$uid AND gbl_qemplisting.EmpNo=$uid AND date(timestamp)='$currentday'
ORDER BY mobile_tech.timestamp
LIMIT 1
Please try with this and say the result
SELECT mobile_tech.latitude,
mobile_tech.longitude,
mobile_tech.timestamp,
mobile_tech.uid,
gbl_qemplisting.EmpNo,
gbl_qemplisting.FirstName,
gbl_qemplisting.LastName
FROM mobile_tech inner join gbl_qemplisting
on mobile_tech.uid=gbl_qemplisting.EmpNo
where mobile_tech.uid=$uid AND date(timestamp)='$currentday'

Categories