Updating a mysql database equine dating service

02 Sep

So, I do it in one "magick" query ;)Here an example:"3" is a some value, from form or somethingupdate item set rate = case when round((rate 3)/2) You sometimes run into the problem that you want to replace a substring occuring in a column with a different string, without touching the rest of the string.

The solution is surprisingly simple, thanks to My SQL: UPDATE xoops_bb_posts_text SET post_text=( REPLACE (post_text, 'morphix.sourceforge.net', ' the string function REPLACE, all items in the post_text column with 'morphix.sourceforge.net' get this substring replaced by '

Suppose you have a table where each row is associated with a certain group (For example, orders are associated with the customers placing them) where each item WITHIN the group has a distinct number (For example, each person my have a sequence of competition results - each person, therefore, has a 1st, 2nd, 3rd... If you would like to renumber items within their group so that each has the same baseline (say 0), here is an example way to proceed: Create TEMPORARY Table Groups (Id INTEGER AUTO_INCREMENT PRIMARY KEY, Name VARCHAR(31), Group Id VARCHAR(31), Val Within Group INTEGER); INSERT INTO Groups VALUES (null, "Davy", "Boy", 2); INSERT INTO Groups VALUES (null, "Mary", "Girl", 2); INSERT INTO Groups VALUES (null, "Bill", "Boy", 5); INSERT INTO Groups VALUES (null, "Jill", "Girl", -3); INSERT INTO Groups VALUES (null, "Fred", "Boy", 3);# Find the lowest value for each group CREATE TEMPORARY TABLE Group Sum AS SELECT Group Id, MIN(Val Within Group) AS base Val FROM Groups GROUP BY Group Id;# create an index so my SQL can efficiently match ALTER TABLE Group Sum ADD UNIQUE (Group Id);# finally, make the baseline adjustment UPDATE Groups LEFT JOIN Group Sum USING (Group Id) SET Val Within Group=Val Within Group-base Val; SELECT * FROM Groups;# 1 Davy Boy 0# 2 Mary Girl 5# 3 Bill Boy 3# 4 Jill Girl 0# 5 Fred Boy 1#Each group ("Boy", "Girl") now has a (lowest) Val Within Group entry of 0.

Notes: That index addition is necessary because on larger tables my SQL would rather die than figure to (internally) index a single column join.

If you add new entries or move stops from one route to another you will most likely want to increment the position of the busstop within this route.

That's how you can do ittable busstopsid | route | busstop | pos1 | 1 | A | 1 2 | 1 | B | 2 3 | 1 | C | 3 4 | 2 | C | 1 5 | 2 | D | 2 6 | 2 | A | 3 7 | 2 | E | 4 8 | 2 | F | 5 9 | 2 | G | 610 | 2 | H | 7Moving D, E, F, G To route 1 SET @pos=(SELECT max(t1.pos) FROM busstops t1 WHERE t1.route = 1 ); UPDATE busstops SET pos = ( SELECT @pos := @pos 1 ), route =1 WHERE id IN (5,7,8,9)I doubt this could be done otherwise since referencing the table you wish to update within the subquery creates circular references After DELETE or UPDATE i.e.

Sometimes you have a lot of processes that could be updating a column value in a table. ID=54321 Here's a workaround for the update/subquery/cant do self table "bug"Senario is, ID 8 has multiple records, only the last (highest) record needs to be changedupdate t1 set c1 = ' NO'where id='8'order by recno desc limit 1I would prefer update t1 set c1=' NO' WHERE ID=8 AND RECNO = (SELECT MAX(RECNO) FROM T1 WHERE ID=8)But that's not currently allowed If you want to update a table based on an aggregate function applied to another table, you can use a correlated subquery, for example: UPDATE table1 SET table1field = (SELECT MAX(table2.table2field) FROM table2 WHERE table1.table1field = table2.table2field)This can be helpful if you need to create a temporary table storing an ID (for, say, a person) and a "last date" and already have another table storing all dates (for example, all dates of that person's orders).

What I'm doing here is copying the information I need from the row where job_id=1 to the row where job_id=6, on the same table.

Adam Boyle's commment above was just what I was trying to do, update one table based on a relationship between that table and another.

A is a normal table, B is a temporary table: Worked in 4update A, B set A.population=B.pop_count where A.id=In version 5, however, the above query only updated one element while still matching "all"In 5 I had to do it like this:update A RIGHT JOIN B on A.id=set A.population=B.pop_count Updates all population counts correctly.[edit: RIGHT JOIN not LEFT JOIN...] Related to the post of Mohamed Hossam on May 9 2005 am A more general method to updtate more one row: UPDATE table SET f1='foo', f2= IF(f3=value,‘one’, IF(f3=value_bis,’two’,f2)) WHERE f5='afected' This set the values of field 'f2' according to the values of field 'f3' in the rows field f5 'afected'.

Here is a way to use multiple tables in your UPDATE statement, but actually copying one row values into the other, meaning, we're using the same table: UPDATE jobs AS to Table, jobs AS from Table SET to Table.job_type_id = from Table.job_type_id, to Table.job_company_id = from Table.job_company_id, to Table.job_source = from Table.job_source, WHERE (to Table.job_id = 6) AND (from Table.job_id = 1)--------------Pretty cool.