Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    query con ranking dei record

    Salve a tutti, sto sbattendo la testa su di una query che possa trovare sei record e al contempo ordinarli in base ad una qualche misura di similarità. Mi spiego meglio con un esempio.
    Ipotizziamo di avere
    (1)una tabella con una serie di macchine con in colonna gli optional (diciamo 5 per ognuna) e rispettivo costo dell'optional:

    macchina|optional1|costooptional1|optional2|costoo ptional2|optional3|costooptional3

    (2) Un form con tre voci in cui l'utente può selezionare le auto aventi uno o più optional desiderati:

    optional1: ______
    optional2: ______
    optional3: ______

    Ciò che mi chiedo è come avere i risultati ordinati in base alla similarità con la query (es. prima le auto aventi tutti e tre gli optional poi quelli con due e infine quelli con solo uno).

    Altri problemi, secondari derivano dal fatto che per fare la query devo scrivere OR un sacco di volte e sono sicuro esista un metodo più semplice.

    Inoltre vorrei fare in modo che un eventuale utente del servizio possa, prima di avere risultati, essere portato su di una pagina dove completare la propria query (es. l'utente vuole l'optional x e y ma il sistema si rende conto che, se l'utente magari gradisse anche l'optional z al quale non ha pensato mentre inseriva la query, alcuni record avrebbero il 100% di similarità con la query). Penso che quest'ultimo punto sia in realtà molto simile alla prima domanda.

    Vi posto il codice utilizzato dal form anche se mi rendo conto che è scritto veramente male (però potrebbe essere un punto di partenza).

    Naturalmente non chiedo che qualcuno mi riscolva del tutto il problema ma mi piacerebbe avere qualche spunto o consiglio. Grazie in anticipo!

    codice:
    <?php
    $con = mysql_connect("####","######","######");
    if (!$con)
      {
      die('Could not connect: ' . mysql_error());
      }
    
    mysql_select_db("######", $con);
    
    $sql =
    "SELECT * 
    FROM automobili
    WHERE optional1 = '$_POST[optional1]'
    OR optional2 = '$_POST[optional1]'
    OR optional3 = '$_POST[optional1]'
    OR optional4 = '$_POST[optional1]'
    OR optional5 = '$_POST[optional1]'
    OR optional1 = '$_POST[optional2]'
    OR optional2 = '$_POST[optional2]'
    OR optional3 = '$_POST[optional2]'
    OR optional4 = '$_POST[optional2]'
    OR optional5 = '$_POST[optional2]'
    OR optional1 = '$_POST[optional3]'
    OR optional2 = '$_POST[optional3]'
    OR optional3 = '$_POST[optional3]'
    OR optional4 = '$_POST[optional3]'
    OR optional5 = '$_POST[optional3]'
    OR optional1 = '$_POST[optional4]'
    OR optional2 = '$_POST[optional4]'
    OR optional3 = '$_POST[optional4]'
    OR optional4 = '$_POST[optional4]'
    OR optional5 = '$_POST[optional4]'
    OR optional1 = '$_POST[optional5]'
    OR optional2 = '$_POST[optional5]'
    OR optional3 = '$_POST[optional5]'
    OR optional4 = '$_POST[optional5]'
    OR optional5 = '$_POST[optional5]'";
    
    $result = mysql_query($sql);
    
    
    while($row = mysql_fetch_array($result))
      {
      echo $row['ID'] . "   " . $row['Nome'];
      echo "
    ";
      }
    
    if (!mysql_query($sql,$con))
      {
      die('Error: ' . mysql_error());
      }
    
    mysql_close($con)
    ?>

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Creati una tabella in cui per ogni record crei l'associazione auto - optional

    codice:
    id id_auto id_optional
    1       1       1
    2       1       2
    3       1       5
    4       2       1
    5       2       4


    La query quindi diventa:

    codice:
    select id_auto,group_concat(id_optional order by id_optional) as opt,count(*) as quanti
    from auto_optionals
    where id_optional in (1,2,3)
    group by id_auto
    order by quanti desc

  3. #3
    Grazie mille, ci provo!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.