sql table to update nulled column [duplicate] - php

This question already has answers here:
sql table how to multliply array of numbers fetched from sql table and stored into array and return
(3 answers)
Closed 9 years ago.
Table like given below
Id country Person Money sum
1 UK john 2010 null
2 USA Henry 120 null
3 RUS neko 130 null
4 GER suka 110 null
7 CAN beater 1450 null
8 USA lusi 2501 null
each money column multiply by 2 and that stored into corresponding sum column how, like given below
Id country Person Money sum
1 UK john 2010 4020
2 USA Henry 120 240
3 RUS neko 130 260
4 GER suka 110 220
7 CAN beater 1450 2900
8 USA lusi 2501 5002

You just want to update the field using an expression like this.
update `tablename` set `sum` = `Money` * 2 where `sum` is null;
If you want this to happen indescriminately you can drop the where portion of the update like:
update `tablename` set `sum` = `Money` * 2;

Related

Select where rows exist more than once with variation

This is a hard one to put a title to so I apologise for ambiguity.
I have the following MySQL table (it's a Magento table):
id attr_id store_id entity_id value
----+---------+---------+------------+------------------------
1 45 0 173 Sale Gifts + Apartment
2 45 0 175 Sale Outerwear
3 45 1 175 Sale Outerwear
4 45 0 177 (null)
5 45 1 177 New Arrivals
6 45 0 178 New Tops
7 45 1 178 New Tops
As you can see, some of the rows have the same everything except store_id.
I want to do the following:
If a row with store_id = 0 has a duplicate row, but with store_id = 1 and different values (for example, rows 4 and 5 above), update the row with store_id = 0 to have the same value as the other.
Delete the row with store_id = 1
I know I will probably need a combination of both PHP and MySQL for this. I just don't know what the MySQL query would be.
Any help would be great!
EDIT
The end goal from the above table is the following
id attr_id store_id entity_id value
----+---------+---------+------------+------------------------
1 45 0 173 Sale Gifts + Apartment
2 45 0 175 Sale Outerwear
4 45 0 177 New Arrivals
6 45 0 178 New Tops
In order to retrive redundunt values having the same entity_id, you can do :
SELECT
*
FROM
magento m1, magento m2
WHERE
m1.attr_id=m2.attr_id
AND
m1.entity_id=m2.entity_id
AND
m1.id > m2.id
And for fixing null values, you will need to loop the above results and search for the null and replace it with the previous or next result.

How to get price difference from same table in SQL

I have following table
slno date productid companyid price
88 2017-05-17 1 1 65.27
87 2017-05-17 1 2 72.94
86 2017-05-17 1 3 73.13
85 2017-05-17 2 1 73.73
84 2017-05-17 2 2 67.71
83 2017-05-16 1 1 65.40
82 2017-05-16 1 2 72.49
81 2017-05-16 2 1 73.31
80 2017-05-16 2 2 67.17
Now I want price of product 1 for 2017-05-17 and difference of price from yesterday for same company id.
e.g:
getPrice( productid = 1, date='2017-05-17')
and this should return :
companyid , productid , date, price, difference from yesterday:
1, 1,'2017-05-17', 65.27, -0.13
2, 1,'2017-05-17', 72.94, 0.45
...
or it should return:
companyid , productid , date, price, yesterday price:
1, 1,'2017-05-17', 65.27, 65.40
2, 1,'2017-05-17', 72.94, 72.49
...
How to get this in PHP SQL?
You should consider doing this with php, because php can tell you yesterdays and today date. So get yesterdays and today date with php and use it to manipulate the sql query
so the query should look something like this
yesterdays Price:
select companyid, productid , date, price from table where productid='1' and date='$yesterday';
Today price
select companyid, productid , date, price from table where productid='1' and date='$today';
now you can get both values and subtract them with php to get the difference

MySQL: DELETE rows beyond nth row within group

I insert rows into a table with time-stamps (time). I could have multiple rows that are identical except id and time. I want to delete all rows that are beyond 5 "iterations". I only want to keep 5 iterations of an instance's "history".
Instance = new entry for name
History = the entries for a particular name
Example:
id name value time
1 blue 15 12/1/2016
2 blue 16 12/2/2016
3 blue 12 12/3/2016
4 blue 43 12/4/2016
5 blue 12 12/5/2016
6 blue 9 12/6/2016
7 blue 33 12/7/2016
8 red 15 12/5/2016
9 red 15 12/8/2016
After Delete:
id name value time
3 blue 12 12/3/2016
4 blue 43 12/4/2016
5 blue 12 12/5/2016
6 blue 9 12/6/2016
7 blue 33 12/7/2016
8 red 15 12/5/2016
9 red 15 12/8/2016
Here was the adopted solution from the suggested almost-duplicate question:
delete l.* from table_name L inner join (
select name, group_concat(id order by time desc) grouped_value from table_name
) R on l.name=r.name and find_in_set(id,grouped_value) > 5

mysql distinct manufacturer,count of 2 other columns and sum of value

Afternoon,
I have a couple of tables in mysql
The first holds the ticket information and status of ticket
The second holds the items and costs for each item.
Each ticket can have multiple items which are stored into the items table.
example table 1
Ticket id Manufacturer status
102 man-A 10
103 man-A 20
104 man-A 10
105 man-C 10
106 man-B 20
example table 2
Ticket id Item Price
102 item_a 100.00
103 item_a 100.00
103 item_b 110.00
103 item_c 115.00
104 item_c 115.00
105 item_b 110.00
106 item_a 100.00
106 item_c 115.00
now on a quick stats page i need to show.
Manufacturer Qty(status 10) Qty(status 20) Value
man-A 2 1 530.00
man-B 0 1 225.00
man-C 1 0 110.00
If there are no tickets with status 10 or status 20 i do not need to show that manufacturer.
I would like to do 1 mysql request to get the stats i need to show.
Many Thanks
Try this with join and using SUM()
SELECT
t1.Manufacturer,
SUM(t1.status =10) `Qty(status 10)`,
SUM(t1.status =20) `Qty(status 20)`,
SUM(t2.price) `Value`
FROM table1 t1
JOIN table2 t2 ON (t1.`Ticket id` =t1.`Ticket id`)
GROUP BY t1.Manufacturer
Fiddle Demo

MYSQL Update single records a table with MIN & MAX values from multiple records in 2nd table MYSQL

I have 2 tables houses & availability - I want to find the min and max for the RENT field for each HOUSEID in AVAILABILITY this contains many records per JOUSEID , then UPDATE the HOUSES table fields MIN_RENT and MAX_RENT, the HOUSES table contains only one entry per HOUSE ID
HOUSES
houseid min_rent max_rent
121 40.00 90.00
122 50.00 80.00
123 40.00 100.00
AVAILABILITY
house_id date rent
121 01/01/12 40
121 01/02/12 50
121 01/03/12 60
121 01/04/12 90
122 01/01/12 40
122 01/02/12 50
122 01/03/12 60
122 01/04/12 80
123 01/01/12 40
123 01/02/12 50
123 01/03/12 60
123 01/04/12 90
Regards
Martyn
a faster solution
UPDATE
HOUSES H
,(
SELECT
house_id
,MIN( rent ) AS min
,MAX( rent ) AS max
FROM
AVAILABILITY
GROUP BY
house_id
) AS A
SET
min_rent = A.min
,max_rent = A.max
WHERE
H.house_id = A.house_id

Categories