Outils pour utilisateurs

Outils du site


informatique:sql

SQL

Voir aussi /informatique/SGBD

Articles

Tips

Données Hiérarchiques (Nested Categories)

Gestion d'arbres par représentation intervallaire

There are categories and sub-categories (with apparently unlimited sub-categories).

If by this you many there are arbitrarily many levels of category nesting, you can't grab them all with a single query using the ‘parent reference’ schema model. You would have to repeatedly query the children of each category you found, recursively, or just keep doing longer and longer self-joins until you've picked up the most-deeply-nested items.

For single-query access to hierarchical data you will have to look into alternative ways of structuring the schema, principally:

  • Nested Sets: stores a numerical ordering of a recursive walk over the tree
  • Adjacency Relation: adds extra ancestor/descendent pairs to your child/parent lookup

Either or both of these approaches, in one of their flavours, may work for you. (I usually end up with Nested Sets so that I get an explicit first-to-last order as well.)

Storing Hierarchical Data in a Database By Gijs Van Tulder April 30th 2003

Managing Hierarchical Data in MySQL By Mike Hillyer (dev.mysql.com)

PHP Cat Nested Model Category Class
This class can be used to manage an hierarchy of categories stored in a MySQL database.
It can add, update and delete records of categories to a MySQL database table.
It can also retrieve categories under a given category, get top categories, get the largest category and get all categories.

Databases Nested Sets and Relational Division

Manipulons ce qui n'est pas

ou encore: sélection des lignes orphelines.

Question

I've got a SELECT query that I would like to transform as a DELETE query , but I could not write that DELETE query ;o{

Here is the case :

In a search engine, I would like to erase all words that are no more attached to a feedback entry.

table Words ( IID, Word ) table Feedbacks_has_Words ( Feedbacks_IID, Words_ID ) table Feedbacks( IID, …. )

When a word has no more feedback attached (relation is table Feedbacks_has_Words) , it should be deleted.

To find such words, this SELECT query works fine :

 SELECT IID,Word, Feedbacks_IID
 FROM Words
 LEFT JOIN Feedbacks_has_Words
 ON IID = Words_IID
 WHERE Feedbacks_IID IS NULL

I could not figure how to right the DELETE Query … Have you got a idea about it ???

Answer

DELETE FROM Words WHERE IID NOT IN
( SELECT Words_ID FROM Feedbacks_has_Words )

Insertions

Question

I've to add some words in a dictionnary table. Words are managed with an Unique Index.

I think about 2 ways :

1/ Make a first query to look if the word already exists, and insert it if not exists.

or

2/ Directly insert the word and catch the exception if the word already exists.

I think the second way is faster/lighter … Is it true ? What do you think about that ?

Answer

there are other alternatives

INSERT IGNORE …. –> (Scroll down for it :) )http://dev.mysql.com/doc/refman/5.0/en/insert.html

INSERT … ON DUPLICATE KEY UPDATE –> http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

REPLACE –> http://dev.mysql.com/doc/refman/5.0/en/replace.html

Tools

MySQL Workbench

HeidiSQL

Tora

http://www.torasql.com

TOra is an open-source multi-platform database management GUI that supports accessing most of the common database platforms in use, including Oracle, MySQL, and Postgres, as well as limited support for any target that can be accessed through Qt's ODBC support. TOra has been built for various Linux distributions, Mac OS X, MS Windows, and UNIX platforms.

In addition to regular query and data browsing functionality, it includes several additional tools useful for database administrators and developers – which aims to help the DBA or developer of database application. Features PL/SQL debugger, SQL worksheet with syntax highlighting, DB browser and a comprehensive set of DBA tools.

informatique/sql.txt · Dernière modification: 25/10/2015 12:15 par cyrille