array_push and array_search array_splice on Laravel query builder - php

Are there any other eloquent query method to deal with the gross process on laravel query builder?
product table
id A_product B_product
1 4,5,8,9 3,7,10,15
2 4,7,10,11 2,3,5,13
which is better does A_product column use array or json?
----search--------------------------------------
if I want to confirm if is there 3 in A_product column on id 1
I use:
$querys=DB::table('product')
->where('id','=','1')
->value('A_product');
if(in_array("3"){
$A_result='1';
}else{
$A_result='0';
};
------insert----------------------------
if I want to add new num 20 to the A_product column
I use:
$querys=DB::table('product')
->where('id','=','1')
->value('A_product');
array_push($querys,"20");
$quearorder=array_value($querys);
DB::table('product')
->where('id', 1)
->update(['A_product' => $queryorder]);
--delete--------------------------------------
if I want to delete num 3 from the A_product column
I use:
$querys=DB::table('product')
->where('id','=','1')
->value('A_product');
$key=array_search(3,$querys);
array_splice($querys,$key,1);
DB::table('product')
->where('id', 1)
->update(['A_product' => $querys]);

Its suggestion that you should store all product into separate column , with product type and the group or for user_id
id product product_type category(or for user)
1 4 A 1
2 5 A 1
3 8 A 1
4 9 A 1
5 4 A 2
6 7 A 2
7 10 A 2
8 11 A 2
1 3 B 1
2 7 B 1
3 10 B 1
4 15 B 1
5 2 B 2
6 3 B 2
7 5 B 2
8 13 B 2
Then you can easily apply CRUD operation

Related

Why does not work whereBetween in laravel

I have a model named Student and this model contains some field
id
teacher_id
roll_number
1
1
1
2
1
2
3
1
3
4
1
4
5
1
5
6
1
6
7
1
7
8
1
8
9
1
9
10
1
10
11
2
11
12
2
12
13
2
13
I have a form that passes values teacher_id, start_roll and end_roll
I have a query where I use whereBetween method to get student information
$studentData = Student::where('teacher_id',$request->teacher_id)->whereBetween('roll_number',[$request->start_roll,$request->end_roll])->get();
where start_roll value is 1 and end_roll value is 10 and teacher_id value is 1 but it is strange it only return two array values where id 1 and 10 only
Again if I search start_roll value is 5 and end_roll value is 10 and teacher_id value is 1 but it also strange it returns an empty array
If I print the above query when search it prints like below
Student::where('teacher_id',1)->whereBetween('roll_number',[5,10])->get();
If I execute the above query hardcoded(entry roll_number manually from 5 to 10) then it works fine for me and it returns 6 number of the array where id start 5 and end 10
I don't know why my search is not working. Any suggestion is appreciate please
You should add all requested values 1,2,3,4,5,6,7,8,9,10.
Like This:
$queryRolls = range($request->start_roll,$request->end_roll);
$studentData = Student::where('teacher_id',$request->teacher_id)->whereIn('roll_number',$queryRolls)->get();

Laravel order by column and relationship column

I have a query which has needs to order by additional data on relationship columns. This is my most recent attempt:
$odds = Odd::with([
'box', 'set'
])->get()->sortBy(function($query) {
return $query->box->position;
})->sortBy('created_at');
The current database tables are like so:
Odds
id. box_id. created_at
1 1 2021-04-02 17:15:04
2 2 2021-04-02 17:15:04
3 3 2021-04-02 17:15:04
4 4 2021-04-02 17:20:05
Box
id set_id position
1 1 3
2 1 1
3 1 5
4 2 2
The query above is able to sort on odds.created_at, but will not sort on the box.position. The result needs to be in date order then with in date group needs to be ordered by position, like so:
id. box_id. created_at set_id position
2 2 2021-04-02 17:15:04 1 1
1 1 2021-04-02 17:15:04 1 3
3 3 2021-04-02 17:15:04 1 5
4 4 2021-04-02 17:20:05 2 2
I have also tried these methods:
$odds = Odd::with([
'box', 'set'
])->get()->sortBy('created_at')->sortBy('box.position');
$odds = Odd::with([
'box' => function ($query) {
$query->orderBy('position');
},
'set'
])->orderBy('created_at')->get();

MYSQL query that contains 2 things I need in 1 query

I have built a live scoring system for a game. When the scores are entered into the MySQL database, they are entered like this...
ID userid sessionid sprintid pointvalue1 pointvalue2 pointvalue3
1 1 1 1 10 5 2
2 2 1 1 10 5 3
3 3 1 1 12 6 3
4 1 1 2 10 6 4
5 2 1 2 12 5 3
6 3 1 2 9 4 3
As you can see from the above, there is 1 session, 2 different sprints (iterations) and 3 different users. I want to display a leader board. The leader board would show (by iteration), user name (from another table), sprint, point value 1, point value 2, point value 3, sum of point value 1 cumulative for all iterations in that session. So on iteration 1, point value 1 and sum of point value 1 cumulative would be the same. But, in iteration 2, I should see a sum of point value 1 of 20 for user 1, 22 for user 2, and 21 for user 3, in the proper order (descending). I tried a subquery using a select sum, but couldn't quite get it right, and I tried a SUM(IF()), which seemed like it would be right, but it's not. I guess I need some guidance on which direction to go.
I think this query will get you the raw data you want. You will probably want to adjust the query with some form of ordering on total points, and possibly WHERE and LIMIT clauses to meet your exact needs.
SELECT s1.userid,
s1.sessionid,
s1.sprintid,
s1.pointvalue1,
s1.pointvalue2,
s1.pointvalue3,
SUM(s2.pointvalue1) AS sum_pointvalue1,
SUM(s2.pointvalue2) AS sum_pointvalue2,
SUM(s2.pointvalue3) AS sum_pointvalue3
FROM scores s1
JOIN (SELECT userid,
sessionid,
sprintid,
SUM(pointvalue1) AS pointvalue1,
SUM(pointvalue2) AS pointvalue2,
SUM(pointvalue3) AS pointvalue3
FROM scores
GROUP BY userid, sessionid, sprintid
) s2
ON s2.userid = s1.userid AND s2.sessionid = s1.sessionid AND s2.sprintid <= s1.sprintid
GROUP BY userid, sessionid, sprintid
ORDER BY sprintid
Output:
userid sessionid sprintid pointvalue1 pointvalue2 pointvalue3 sum_pointvalue1 sum_pointvalue2 sum_pointvalue3
2 1 1 10 5 3 10 5 3
3 1 1 12 6 3 12 6 3
1 1 1 10 5 2 10 5 2
2 1 2 12 5 3 22 10 6
3 1 2 9 4 3 21 10 6
1 1 2 10 6 4 20 11 6
SQLFiddle Demo

How to calculate MLM User Income points in php

I'm trying to Calculate Income Points for MLM network Users (i.e).,
I'm having five types of kits such as Rs.0/-, Rs.1000/-, Rs.2000/-, Rs.4000/-, Rs.10000/- .
Once the kit is purchased a unique pin and user id will generate for each individual kit like
If 2 number of 2000/- kit purchased means userid and pin will be
2000100 539fdda37c435 and
2000101 5395b0d8b66d1 .....
Then Based on new user sponsor id(Sponsor id will be old user), registration will be proceed with Group left and right.
Now what's my problem is While calculating income point of a user how can i take their children user from top to bottom. I'd strucked in MYSQL Query.
For Example.,
now how can i get each node's value for a parent node(1) to root node(12) from this dynamic tree in php ??
I struck in this loop concept.,
Thanks IN Advance.,
database architecture
id par lev lef rgt status wallet userstatus
1 1 1 2 3 1 0 0
2 2 2 4 5 1 0 0
6 3 2 6 7 1 0 0
8 4 3 8 9 1 0 0
9 5 3 10 11 1 0 0
10 6 3 12 13 1 0 0
11 7 3 0 0 1 0 0

Two arrays, one array to list items, second to sort the first one, php code how to?

So I got function that prints out array score which concert clinics:
array_id clinic_id score_amount
0 1 5
1 2 1
2 3 5
3 5 3
4 8 2
And i got another function that prints out array clinics id like this:
This array is for listing all clinics on page,
array_id clinic_id
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
Now my idea is to make array of clinic_id sorted accordinally to score_amount from first array.
And theen if there is no score_amount for particular clinic_id, just go with order from second array normally.
So results needs to be sorted like:
array_id clinic_id
0 1
1 3
2 5
3 8
4 2
5 4
6 6
7 7
8 9
9 10
You could use an associative array (clinic_id => score_amount) and use asort.
use a custom comparator,
function cmp($a, $b)
{
if($a == $b) return 0;
\\get score returns score or -1 if no score exists
if (getscore($a) == getscore($b) {
return (index($a) < index($b)) ? -1 : 1; \\index is index of the number in second array
}
return (getscore($a) < getscore($b)) ? -1 : 1;
}
usort($a, "cmp");

Categories