Data structure - PHP's problem with mysql database traversal
An algorithm optimization problem about the agent distribution system
For example, the agent levels are divided into three levels: gold, silver and bronze. I am now gold agent A. At the same time, I have developed silver agents B, C and D. Silver agent b has developed bronze agents E and F, as shown in the picture:
A List of subordinate agents
╦═══════
║
╠═ b
║ ╠══ e
║ ╠══ f
╠═ c
╠═ d
I now use the program Make an example like the one above The diagram method is: (PHP+MYSQL)
First search for all agents whose superior agent is A.
For example, if agent B is found, then search for all agents whose superior agent is B. This search is completed.
Search for agent C again…………
and so on.
Question:
There are now 300,000 records in the agent database. Each agent can view his own subordinate agent tree in the agent distribution system. Follow the above method:
Every search will take a long time. If an agent has 1,000 subordinate agents , then it won’t be displayed at all.
The solution I thought of is to use an array to store all user relationships, and then store this array as a file. Each time a user is added or deleted, the array will be updated at the same time, and then the desired data will be traversed from the array, and then Just go directly to the database and execute a select. . Is this method feasible? Are there any other solutions?
Traverse
If you want to find the bottom members from the upper level members, you will use traversal. Visually, it is the level traversal of the ternary tree. This algorithm will visually query the database many times. . . It consumes too much resources. Are there any alternatives? cache? redis?
Reply content:
An algorithm optimization problem about the agent distribution system
For example, the agent levels are divided into three levels: gold, silver and bronze. I am now gold agent A, and at the same time I have developed silver agents B, C and D. Silver agent b has developed bronze agents E and F, as shown in the picture:
A List of subordinate agents
╦═══════
║
╠═ b
║ ╠══ e
║ ╠══ f
╠═ c
╠═ d
I now use the program Make an example like the one above The diagram method is: (PHP+MYSQL)
First search for all agents whose superior agent is A.
For example, if agent B is found, then search for all agents whose superior agent is B. This search is completed.
Search for agent C again…………
and so on.
There are now 300,000 records in the agent database. Each agent can view his own subordinate agent tree in the agent distribution system. Follow the above method:
Every search will take a long time. If an agent has 1,000 subordinate agents , then it won’t be displayed at all.
The solution I thought of is to use an array to store all user relationships, and then store this array as a file. Each time a user is added or deleted, the array will be updated at the same time, and then the desired data will be traversed from the array, and then Just go directly to the database and execute a select. . Is this method feasible? Are there any other solutions?
Traverse
If you want to find the bottom members from the upper level members, you will use traversal. Visually, it is the level traversal of the ternary tree. This algorithm will visually query the database many times. . . It consumes too much resources. Are there any alternatives? cache? redis?
It is recommended to hierarchical query, query data on demand, displaying a relationship tree at one time requires many queries and consumes resources;
Such an implementation can look at infinite levels of classification, use the left and right value principle, and traverse the tree structure in order, which is the same as the classification of shopping malls. Principle
It’s not appropriate to display the entire tree on one page. It can be queried on demand.
The gold agent opens the page to display all the silver agents of his subordinates. Click on the silver agent user to view his subordinate bronze agents
- If the updates are not very frequent, use
- cache
(the data volume is 300,000, it is estimated that it can only cache level 1~2), instead of using SQL query every time.
Load multiple times, as mentioned above, first load the - N level
, wait for the click, and then use ajax to request the
N+1 level
.
Search for the specific answer yourself. It’s very troublesome to explain this in detail. I’ll give you the general principle.
How can you know who your subordinates are as quickly as possible? If everyone comes to stand in line, just meet two conditions, 1- you know who is the first, 2- ensure that you are the last (of course you can also know who is the last, and ensure that you are the first)
According to this It can be inferred that fast search can be achieved by assigning an appropriate serial number to each node, such as select * from tree where indexNumber >= search.node.min && indexNumber < search.node.indexNumber
The final table structure is similar
id, parent_id (parent node), top_id (root node, if there are multiple trees), indexNumber (index number in the tree, top_id+indexNumber is unique), min (I am Benchmark, who is the first under this branch), level (tree height)
For your example it should be similar (the first number in brackets is the index number, the second is min, the third is the tree height)
<code> a(6,1,0) b(3,1,1) c(4,4,1) d(5,5,1) e(1,1,2) f(2,2,2)</code>
This structure is more complicated when operating nodes (for example, if you add a g after f, or delete f, then abcd needs to recalculate the sequence number), but the search is very fast. Generally, the results can be obtained in one search.

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



MySQL is an open source relational database management system, mainly used to store and retrieve data quickly and reliably. Its working principle includes client requests, query resolution, execution of queries and return results. Examples of usage include creating tables, inserting and querying data, and advanced features such as JOIN operations. Common errors involve SQL syntax, data types, and permissions, and optimization suggestions include the use of indexes, optimized queries, and partitioning of tables.

PHP and Python each have their own advantages, and choose according to project requirements. 1.PHP is suitable for web development, especially for rapid development and maintenance of websites. 2. Python is suitable for data science, machine learning and artificial intelligence, with concise syntax and suitable for beginners.

PHP remains important in modern web development, especially in content management and e-commerce platforms. 1) PHP has a rich ecosystem and strong framework support, such as Laravel and Symfony. 2) Performance optimization can be achieved through OPcache and Nginx. 3) PHP8.0 introduces JIT compiler to improve performance. 4) Cloud-native applications are deployed through Docker and Kubernetes to improve flexibility and scalability.

MySQL is chosen for its performance, reliability, ease of use, and community support. 1.MySQL provides efficient data storage and retrieval functions, supporting multiple data types and advanced query operations. 2. Adopt client-server architecture and multiple storage engines to support transaction and query optimization. 3. Easy to use, supports a variety of operating systems and programming languages. 4. Have strong community support and provide rich resources and solutions.

The reasons why PHP is the preferred technology stack for many websites include its ease of use, strong community support, and widespread use. 1) Easy to learn and use, suitable for beginners. 2) Have a huge developer community and rich resources. 3) Widely used in WordPress, Drupal and other platforms. 4) Integrate tightly with web servers to simplify development deployment.

PHP is a scripting language widely used on the server side, especially suitable for web development. 1.PHP can embed HTML, process HTTP requests and responses, and supports a variety of databases. 2.PHP is used to generate dynamic web content, process form data, access databases, etc., with strong community support and open source resources. 3. PHP is an interpreted language, and the execution process includes lexical analysis, grammatical analysis, compilation and execution. 4.PHP can be combined with MySQL for advanced applications such as user registration systems. 5. When debugging PHP, you can use functions such as error_reporting() and var_dump(). 6. Optimize PHP code to use caching mechanisms, optimize database queries and use built-in functions. 7

MySQL's position in databases and programming is very important. It is an open source relational database management system that is widely used in various application scenarios. 1) MySQL provides efficient data storage, organization and retrieval functions, supporting Web, mobile and enterprise-level systems. 2) It uses a client-server architecture, supports multiple storage engines and index optimization. 3) Basic usages include creating tables and inserting data, and advanced usages involve multi-table JOINs and complex queries. 4) Frequently asked questions such as SQL syntax errors and performance issues can be debugged through the EXPLAIN command and slow query log. 5) Performance optimization methods include rational use of indexes, optimized query and use of caches. Best practices include using transactions and PreparedStatemen

PHP is still dynamic and still occupies an important position in the field of modern programming. 1) PHP's simplicity and powerful community support make it widely used in web development; 2) Its flexibility and stability make it outstanding in handling web forms, database operations and file processing; 3) PHP is constantly evolving and optimizing, suitable for beginners and experienced developers.
