My PHP application has the function product_fetch([parameters]) which returns ‘Product’ objects which information are stored in database.
In my admin area, there is a page called “Featured Products” which allows me to select 10 products to be displayed in the main page.
Now comes the problem: I made 10 select/combobox, each allows me to select one product, out of 400. So in order to make all the options, a query has to be made: SELECT * FROM products
Question: Is it correct to make such a query, even though there’s hundreds of rows?
You would be much better of specifying which produts you want in the query and only returning those if you have no intention of using any of the others at all.
You can do this using many methods. A simple one would be using an ID field in an
instatement like this:It might seem to make little difference, but what if your procuts table had a hundred thousand rows in it?
You could also have a flag in the table to say that the items are featured which would let you use something like this:
Or you could even have a table that only has featured items (even just their ID) and join it to your main listing like this:
If you want to pick through your whole table, you can even use a simple
limitclause that picks up a certain number of rows from the table and can be reused to get the next set:The short version is though, no matter how you do it, pulling back a whole table of data to pick through it within PHP is a bad thing and to be avoided at all costs. It makes the database work much harder, uses more network between the database and PHP (even if they are on the same machine, it is transferring a lot more data between the two of them) and it will by default make PHP use a lot more resources to process the information.