Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1314 connectés 

  FORUM HardWare.fr
  Programmation

  [MySQL] Problème avec une requête...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MySQL] Problème avec une requête...

n°201152
toutoune
Posté le 24-08-2002 à 10:10:26  profilanswer
 

Voilà... j'ai une table qui se présente à peu près comme ça :
 
id | chemin | titre | ...
-------------------------
 
sachant que j'ai plusieurs entrées dans cette table (!), je voudrais à partir de plusieurs id sélectionner la ligne dont le chemin est identique pour ces id...
Par exemple j'ai ça :
 
1 | rep1 | titre1
2 | rep2 | titre2
3 | rep1 | titre1
3 | rep2 | titre2
 
Si je fais ma sélection sur les id 1 et 3 je voudrai que ma requête me renvoie rep1 et titre1.
C'est possible?
Ou faut que j'utilise un traitement PHP derrière?
 :??:

mood
Publicité
Posté le 24-08-2002 à 10:10:26  profilanswer
 

n°201157
SquiiiD
be cool !
Posté le 24-08-2002 à 10:22:43  profilanswer
 

"SELECT UNION..." , je connais plus la syntaxe exacte...
 
 
telecharge la doc MySQL ici tu auras toutes tes reponses ....  
 
http://dev.nexen.net/docs/mysql/chargement.html

n°201158
toutoune
Posté le 24-08-2002 à 10:23:47  profilanswer
 

ok merci je vais regarder çà!

n°201163
toutoune
Posté le 24-08-2002 à 11:00:24  profilanswer
 

ah ouais mais apparement ça ne marche que sous MySQL 4.0...
je suis sous une 3.23.xx
Z'auriez pas une autre solution?

n°201176
darklord
You're welcome
Posté le 24-08-2002 à 11:43:22  profilanswer
 

bin normallement c'est select distinct( ...) mais je ne sais pas si c supporté mar mysql


---------------
Just because you feel good does not make you right
n°201177
kuroineko
je mamgerais bien un truc la..
Posté le 24-08-2002 à 11:45:13  profilanswer
 

DarkLord a écrit a écrit :

bin normallement c'est select distinct( ...) mais je ne sais pas si c supporté mar mysql




 
select distinct c'est assez standard donc je suppose que mysql le reconnait.


---------------
[:kuroineko] Francois.P tel: (+33)617230820 http://www.ifrance.com/fpussault  fpussault@caramail.com
n°201189
toutoune
Posté le 24-08-2002 à 12:18:05  profilanswer
 

oui mais avec distinct je ne vais pas avoir ce que je veux  :??:  
Je veux en fait sélectionner les lignes qui auraient l'ID a ou b ET ayant le même chemin (qui est à trouver dans la table...)
Je crois pas que ce soit faisable en une seule requête?

n°201190
darklord
You're welcome
Posté le 24-08-2002 à 12:21:15  profilanswer
 

comment veux tu qu'on devine ce que tu veux faire si tu le précises pas !


---------------
Just because you feel good does not make you right
n°201191
toutoune
Posté le 24-08-2002 à 12:24:11  profilanswer
 

ben j'avé essayé de l'expliquer au début! mais c pas facile à faire comprendre dsl!

n°201193
darklord
You're welcome
Posté le 24-08-2002 à 12:26:33  profilanswer
 

qu'est ce que tu appelles par chemin déjà ...


---------------
Just because you feel good does not make you right
mood
Publicité
Posté le 24-08-2002 à 12:26:33  profilanswer
 

n°201194
toutoune
Posté le 24-08-2002 à 12:32:37  profilanswer
 

c un des champ de ma table

Citation :

Voilà... j'ai une table qui se présente à peu près comme ça :  
 
id | chemin | titre | ...  
-------------------------  

n°201197
darklord
You're welcome
Posté le 24-08-2002 à 12:42:06  profilanswer
 

toutoune a écrit a écrit :

c un des champ de ma table

Citation :

Voilà... j'ai une table qui se présente à peu près comme ça :  
 
id | chemin | titre | ...  
-------------------------  






 
un record tu veux dire? Un champ c'est la valeur d'une colonne d'un record ...


---------------
Just because you feel good does not make you right
n°201198
toutoune
Posté le 24-08-2002 à 12:49:16  profilanswer
 

bien écoute, sous PHPMyAdmin par exemple, quand je fais créer une nouvelle table, il me demande le nom bre de CHAMPS que je souhaite... j'appelle donc ça une champ  :??:  
Sinon as-tu compris ma question ou tu veux que j'apporte des précisions?

n°201206
MagicBuzz
Posté le 24-08-2002 à 13:04:36  profilanswer
 

toutoune a écrit a écrit :

oui mais avec distinct je ne vais pas avoir ce que je veux  :??:  
Je veux en fait sélectionner les lignes qui auraient l'ID a ou b ET ayant le même chemin (qui est à trouver dans la table...)
Je crois pas que ce soit faisable en une seule requête?




SELECT T1.ID, T1.REP, T1.TITRE
FROM TaTable T1, TaTable T2
WHERE T1.ID IN (a, b)
AND T2.ID IN (a, b)
AND T2.ID <> T1.ID
AND T1.REP || T1.TITRE = T2.REP || T2.REP
 
A priori, ça doit marcher.
 
Par contre, j'avoue que j'en suis pas sûr du tout et que j'ai la flèmme de tester :D
 
Par contre, ton besoin de semble bizarre. Tu veux expliquer en détail ce que tu veux faire, dans quel contexte ?
 
Parceque ça me semble bizarre de vouloir récupérer ça comme ça :heink:


Message édité par MagicBuzz le 24-08-2002 à 13:05:45
n°201207
MagicBuzz
Posté le 24-08-2002 à 13:05:23  profilanswer
 

DarkLord a écrit a écrit :

 
 
un record tu veux dire? Un champ c'est la valeur d'une colonne d'un record ...




Un record, c'est une ligne (retournée par une requête), un champ c'est une colonne ;)

n°201209
darklord
You're welcome
Posté le 24-08-2002 à 13:05:59  profilanswer
 

toutoune a écrit a écrit :

bien écoute, sous PHPMyAdmin par exemple, quand je fais créer une nouvelle table, il me demande le nom bre de CHAMPS que je souhaite... j'appelle donc ça une champ  :??:  




 
tu confonds colonnes et ligne ...


---------------
Just because you feel good does not make you right
n°201210
darklord
You're welcome
Posté le 24-08-2002 à 13:06:12  profilanswer
 

arf grillaid :(


---------------
Just because you feel good does not make you right
n°201223
toutoune
Posté le 24-08-2002 à 13:49:21  profilanswer
 

MagicBuzz a écrit a écrit :

 
Par contre, ton besoin de semble bizarre. Tu veux expliquer en détail ce que tu veux faire, dans quel contexte ?
 
Parceque ça me semble bizarre de vouloir récupérer ça comme ça :heink:




Ok je vais expliquer en gros...
J'ai fait un moteur de recherche qui indexe automatiquement toutes mes pages.
Grace à mes tables, je sais dans quelle(s) page(s) je peux trouver quel mot.
Et j'ai besoin de faire ça lorsque j'effectue une recherche sur toute une expression. Je recherche alors LA page qui contient ces deux mots. (mes mots sont identifiés par le 'id';)
C'est plus clair?
En tout cas merci je vais essayer ça ce soir!
@+  :hello:  

n°201228
darklord
You're welcome
Posté le 24-08-2002 à 13:59:38  profilanswer
 

repense ton data model il est pourris. Si il était bien pensé ca serait BCP plus simple de faire ce genre de requête ...


---------------
Just because you feel good does not make you right
n°201234
MagicBuzz
Posté le 24-08-2002 à 14:07:29  profilanswer
 

Bon, ma réponse doit faire ce que tu veux alors.
 
PS: c'est quand je lis ce genre de topic que jeme dis que M$ à vraiment eu une très bonne idée que d'intégrer "FullTextSearch" à SQL Server, et IndexServer pour les pages statiques... Comment ça simplicite la vie :love:


Message édité par MagicBuzz le 24-08-2002 à 14:08:49
n°201243
darklord
You're welcome
Posté le 24-08-2002 à 14:32:36  profilanswer
 

mais c pas standard ...


---------------
Just because you feel good does not make you right
n°201262
MagicBuzz
Posté le 24-08-2002 à 16:00:02  profilanswer
 

DarkLord a écrit a écrit :

mais c pas standard ...




Qu'est-ce qui n'est pas standard :??:

n°201285
darklord
You're welcome
Posté le 24-08-2002 à 17:34:36  profilanswer
 

MagicBuzz a écrit a écrit :

 
Qu'est-ce qui n'est pas standard :??:




 
bin les fonctionnalités de sql server tiens ...


---------------
Just because you feel good does not make you right
n°201290
MagicBuzz
Posté le 24-08-2002 à 17:42:08  profilanswer
 

C'est pas des fonctionnalités, c'est des procédures stockées (du moins, c'est implémenté de façon à tourner comme une PS) donc si, c'est tout ce qu'il y a de plus standard.
 
Rien n'empêche un éditeur de développer des PS avec une interface compatible pour oracle et les requêtes seront portables.
 
Au contraire, M$ pour un coup s'est bien démerdé. Ils ont fait ça proprement sans ajouter d'instruction au langage T-SQL (qui fait l'objet d'une norme déposée) qui est par ailleurs 95% compatible avec le PL/SQL (l'autre standard)


Message édité par MagicBuzz le 24-08-2002 à 17:58:04
n°201293
MagicBuzz
Posté le 24-08-2002 à 17:45:48  profilanswer
 

[HS] Voici la doc de SQL Server 2K pour une des fonctions de FullTextSearch.
La fonction retourne une table temporaire capable d'être utilisée lors d'une jointure par exmple.
L'appel de la fonction est identique à n'importe quelle fonction écrite en T-SQL (ou PL/SQL)
 

Citation :

CONTAINSTABLE
Returns a table of zero, one, or more rows for those columns containing character-based data types for precise or fuzzy (less precise) matches to single words and phrases, the proximity of words within a certain distance of one another, or weighted matches. CONTAINSTABLE can be referenced in the FROM clause of a SELECT statement as if it were a regular table name.
 
Queries using CONTAINSTABLE specify contains-type full-text queries that return a relevance ranking value (RANK) for each row. The CONTAINSTABLE function uses the same search conditions as the CONTAINS predicate.
 
Syntax
CONTAINSTABLE ( table , { column | * } , ' < contains_search_condition > '  
    [ , top_n_by_rank ] )  
 
< contains_search_condition > ::=  
        { < simple_term >  
        | < prefix_term >  
        | < generation_term >  
        | < proximity_term >  
        |  < weighted_term >  
        }  
        | { ( < contains_search_condition > )  
        { AND | AND NOT | OR } < contains_search_condition > [ ...n ]  
        }
 
< simple_term > ::=  
    word | " phrase "
 
< prefix term > ::=  
    { "word * " | "phrase * " }  
 
< generation_term > ::=  
    FORMSOF ( INFLECTIONAL , < simple_term > [ ,...n ] )  
 
< proximity_term > ::=  
    { < simple_term > | < prefix_term > }  
    { { NEAR | ~ } { < simple_term > | < prefix_term > } } [ ...n ]  
 
< weighted_term > ::=  
    ISABOUT
        ( { {  
                < simple_term >  
                | < prefix_term >  
                | < generation_term >  
                | < proximity_term >  
                }  
            [ WEIGHT ( weight_value ) ]  
            } [ ,...n ]  
        )  
 
Arguments
table
 
Is the name of the table that has been marked for full-text querying. table can be a one-, two-, or three-part database object name. For more information, see Transact-SQL Syntax Conventions. table cannot specify a server name and cannot be used in queries against linked servers.
 
column
 
Is the name of the column to search, which resides in table. Columns of the character string data types are valid full-text searching columns.
 
*
 
Specifies that all columns in the table that have been registered for full-text searching should be used to search for the given contains search condition(s).  
 
top_n_by_rank
 
Specifies that only the n highest ranked matches, in descending order, are returned. Applies only when an integer value, n, is specified.
 
<contains_search_condition>
 
Specifies some text to search for in column. Variables cannot be used for the search condition. For more information, see CONTAINS.  
 
Remarks
The table returned has a column named KEY that contains full-text key values. Each full-text indexed table has a column whose values are guaranteed to be unique, and the values returned in the KEY column are the full-text key values of the rows that match the selection criteria specified in the contains search condition. The TableFulltextKeyColumn property, obtained from the OBJECTPROPERTY function, provides the identity for this unique key column. To obtain the rows you want from the original table, specify a join with the CONTAINSTABLE rows. The typical form of the FROM clause for a SELECT statement using CONTAINSTABLE is:
 
SELECT select_list
FROM table AS FT_TBL INNER JOIN
   CONTAINSTABLE(table, column, contains_search_condition) AS KEY_TBL
   ON FT_TBL.unique_key_column = KEY_TBL.[KEY]
 
The table produced by CONTAINSTABLE includes a column named RANK. The RANK column is a value (from 0 through 1000) for each row indicating how well a row matched the selection criteria. This rank value is typically used in one of these ways in the SELECT statement:  
 
In the ORDER BY clause to return the highest-ranking rows as the first rows in the table.
 
 
In the select list to see the rank value assigned to each row.
 
 
In the WHERE clause to filter out rows with low rank values.  
CONTAINSTABLE is not recognized as a keyword if the compatibility level is less than 70. For more information, see sp_dbcmptlevel.  
 
Permissions
Execute permissions are available only by users with the appropriate SELECT privileges on the table or the referenced table's columns.
 
Examples
A. Return rank values using CONTAINSTABLE  
This example searches for all product names containing the words breads, fish, or beers, and different weightings are given to each word. For each returned row matching this search criteria, the relative closeness (ranking value) of the match is shown. In addition, the highest ranking rows are returned first.
 
USE Northwind
GO
SELECT FT_TBL.CategoryName, FT_TBL.Description, KEY_TBL.RANK
FROM Categories AS FT_TBL INNER JOIN  
   CONTAINSTABLE(Categories, Description,  
   'ISABOUT (breads weight (.8),  
   fish weight (.4), beers weight (.2) )' ) AS KEY_TBL
   ON FT_TBL.CategoryID = KEY_TBL.[KEY]
ORDER BY KEY_TBL.RANK DESC
GO
 
B. Return rank values greater than specified value using CONTAINSTABLE
This example returns the description and category name of all food categories for which the Description column contains the words "sweet and savory" near either the word "sauces" or the word "candies." All rows with a category name "Seafood" are disregarded. Only rows with a rank value of 2 or higher are returned.  
 
USE Northwind
GO
SELECT FT_TBL.Description,  
   FT_TBL.CategoryName,  
   KEY_TBL.RANK
FROM Categories AS FT_TBL INNER JOIN
   CONTAINSTABLE (Categories, Description,  
      '("sweet and savory" NEAR sauces) OR
      ("sweet and savory" NEAR candies)'
   ) AS KEY_TBL
   ON FT_TBL.CategoryID = KEY_TBL.[KEY]
WHERE KEY_TBL.RANK > 2
   AND FT_TBL.CategoryName <> 'Seafood'
ORDER BY KEY_TBL.RANK DESC
 
C. Return top 10 ranked results using CONTAINSTABLE and Top_n_by_rank
This example returns the description and category name of the top 10 food categories where the Description column contains the words "sweet and savory" near either the word "sauces" or the word "candies."  
 
SELECT FT_TBL.Description,  
   FT_TBL.CategoryName,  
   KEY_TBL.RANK
FROM Categories AS FT_TBL INNER JOIN
   CONTAINSTABLE (Categories, Description,  
      '("sweet and savory" NEAR sauces) OR
      ("sweet and savory" NEAR candies)'
      , 10
   ) AS KEY_TBL
   ON FT_TBL.CategoryID = KEY_TBL.[KEY]


Message édité par MagicBuzz le 24-08-2002 à 17:46:00
n°201303
toutoune
Posté le 24-08-2002 à 19:28:40  profilanswer
 

DarkLord a écrit a écrit :

repense ton data model il est pourris. Si il était bien pensé ca serait BCP plus simple de faire ce genre de requête ...




T'a une meilleure idée?  :??:  
Pour moi, le fait de savoir dans quelles pages se trouve quel mot et avec quelle fréquence me semble être le plus simple non?

n°201306
MagicBuzz
Posté le 24-08-2002 à 19:32:12  profilanswer
 

Ca te dis pas de stocker plutôt les textes de tes pages dans la base ?
 
Ca sera un peu plus simple non ?

n°201308
darklord
You're welcome
Posté le 24-08-2002 à 19:37:17  profilanswer
 

toutoune a écrit a écrit :

 
T'a une meilleure idée?  :??:  
Pour moi, le fait de savoir dans quelles pages se trouve quel mot et avec quelle fréquence me semble être le plus simple non?




 
vi mais c la façon dont tu représentes l'info en base qui fait que ta requete est compliquée ...


---------------
Just because you feel good does not make you right
n°201309
MagicBuzz
Posté le 24-08-2002 à 19:39:49  profilanswer
 

C'est vrai que déjà, tu peux ajouter un champ "NB" qui contient le nombre d'occurences du mot dans la page.
 
Et comme ça tu peux même te lancer dans des fonctions plus complexes, permettant de pondérer le nombre d'occurences par le ration de présence de chaque mot clé, afin de savoir si en plus de contenir les mots, la page parle ou non de la chose...

n°201311
toutoune
Posté le 24-08-2002 à 19:49:37  profilanswer
 

MagicBuzz a écrit a écrit :

Ca te dis pas de stocker plutôt les textes de tes pages dans la base ?
 
Ca sera un peu plus simple non ?




Oui mais un site complet dans une base de données... je trouve que ça fais un peu de la place perdue non?
Là pour un site de 300 pages (générables) environ, j'ai une base de 4Mo.
 
 

MagicBuzz a écrit a écrit :

 
C'est vrai que déjà, tu peux ajouter un champ "NB" qui contient le nombre d'occurences du mot dans la page.  
 
Et comme ça tu peux même te lancer dans des fonctions plus complexes, permettant de pondérer le nombre d'occurences par le ration de présence de chaque mot clé, afin de savoir si en plus de contenir les mots, la page parle ou non de la chose...




C'est déjà fait. J'avais dit plus haut que 'en gros' la table se présentait avec id/champ/titre. Mais j'ai aussi 'poids' et 'description'

n°201317
MagicBuzz
Posté le 24-08-2002 à 20:05:38  profilanswer
 

Alors pourquoi tu as des doublons  :heink:

n°201338
toutoune
Posté le 24-08-2002 à 21:36:09  profilanswer
 

des doublons parce qu'on mot peut se trouver dans plusieurs pages différentes!


Message édité par toutoune le 24-08-2002 à 21:36:19
n°201341
MagicBuzz
Posté le 24-08-2002 à 21:48:57  profilanswer
 

oui mais "chemin" et "titre" seront différents dans ce cas...

n°201358
toutoune
Posté le 24-08-2002 à 22:55:34  profilanswer
 

oui et alors?
(comme ils sont différents ce ne sont donc pas des doublons!)
 
Je te suis plus là!

n°201369
MagicBuzz
Posté le 24-08-2002 à 23:38:06  profilanswer
 

toutoune a écrit a écrit :

oui et alors?
(comme ils sont différents ce ne sont donc pas des doublons!)
 
Je te suis plus là!




ben utilise ton ancienne requête et utilise le champ "NB" en plus dans le seclet et voilà :)

n°201370
MagicBuzz
Posté le 24-08-2002 à 23:39:48  profilanswer
 

euh... koi que non... après relecture, je mélange avec un autre topic (un problème à moi :D)

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [MySQL] Problème avec une requête...

 

Sujets relatifs
[vbs] Prôblème à la conRequête SQL et DBLookupComboBox ???
[PHP/MYSQL] Pb connection Mysql avec EasyPHP 1.6[MySQL] help schéma bdd... newbee inside
Arrondir dans une requette MySQL ?petit probleme pour charger mon doc xml
[MySQL] Connaître la date d'un éventuel dernier accès.Problème requête MySql avec un ";" dedans (un peu de PHP aussi)
[php/mysql]probleme sur le renvoie d'une requete[MySQL] Problème de requête :(
Plus de sujets relatifs à : [MySQL] Problème avec une requête...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR