|  Lid |  | Beste, 
 wij hebben een zoekoptie op onze webwinkel waar een paar honderdduizend producten in staan. De query is dus wel zwaar maar dat ter zijde. We hebben een werkende zoekopdracht momenteel. Om het simpel te houden zal ik hier de verkorte code laten zien. Wat ik nu graag wil is een score toekennen zodat we kunnen zeggen welke dingen zwaarder wegen dan andere, echter krijg ik het niet voor elkaar.
 
 Het is gelukt, echter krijg ik dan maar één resultaat terug wat niet klopt. Wanneer ik de union verwijder dan krijg ik gewoon alle resultaten zoals het hoort weer terug.
 
 Iemand die mij kan vertellen hoe ik dit werkend krijg?
 
 De code zoals we die nu hebben (groot stuk er uit gelaten maar deze werkt en geeft exact het idee weer:
 
 
 
    
    
        
            
                $query = mysql_query('SELECT p.ProductNumber, p.assign_breda, p.lock_breda, ((p.nQtyAvailable + p.AvailableFromSupplier + nQtyAvailable_breda + p.nQtyAvailable_shop)> 0) as inVoorraad, pd.product_id,
                      p.id, p.ProductType,p.ProductNumber, p.newcollection , p.ItemName, p.ItemNameSub, p.BrandID,
                      p.nQtyAvailable,p.AvailableFromSupplier,p.nQtyAvailable_shop,p.nQtyAvailable_breda,
                      p.SpecialOfferMIT,p.SpecialOfferPrice, p.InternetPrice,p.HighVAT, p.show_mm ,p.Diameter, p.BandSize,
                      sum(relevance)
                      FROM Products AS p
                      INNER JOIN products_domains AS pd
                      ON
                      p.id = pd.product_id
                      LEFT JOIN NewCollection nc
                      on nc.id = p.newcollection
                      LEFT JOIN brandpage_product_sort bps
                      on bps.pid = p.id
                      WHERE
                      pd.domain_id = "'.mysql_real_escape_string($g_iDomainID).'"') or die(mysql_error()); $query = mysql_query('SELECT p.ProductNumber, p.assign_breda, p.lock_breda, ((p.nQtyAvailable + p.AvailableFromSupplier + nQtyAvailable_breda + p.nQtyAvailable_shop)> 0) as inVoorraad, pd.product_id,                      p.id, p.ProductType,p.ProductNumber, p.newcollection , p.ItemName, p.ItemNameSub, p.BrandID,                      p.nQtyAvailable,p.AvailableFromSupplier,p.nQtyAvailable_shop,p.nQtyAvailable_breda,                      p.SpecialOfferMIT,p.SpecialOfferPrice, p.InternetPrice,p.HighVAT, p.show_mm ,p.Diameter, p.BandSize,                      sum(relevance)                      FROM Products AS p                      INNER JOIN products_domains AS pd                      ON                      p.id = pd.product_id                      LEFT JOIN NewCollection nc                      on nc.id = p.newcollection                      LEFT JOIN brandpage_product_sort bps                      on bps.pid = p.id                      WHERE
   
 De code die werkt maar slechts 1 resultaat terug geeft:
 
 
 
    
    
        
            
                $sql = 'SELECT *, sum(relevance)
                      FROM (
                        SELECT p.*, 100 AS relevance
                        FROM Products AS p
                        INNER JOIN products_domains AS pd
                          ON p.id = pd.product_id
                        LEFT JOIN NewCollection nc
                          ON nc.id = p.newcollection
                        LEFT JOIN brandpage_product_sort bps
                          ON bps.pid = p.id
                        WHERE p.ItemName LIKE "%a%"
                          AND pd.domain_id = "'.mysql_real_escape_string($g_iDomainID).'"
                        UNION SELECT p.*, 75 AS relevance
                        FROM Products AS p
                        INNER JOIN products_domains AS pd
                          ON p.id = pd.product_id
                        LEFT JOIN NewCollection nc
                          ON nc.id = p.newcollection
                        LEFT JOIN brandpage_product_sort bps
                          ON bps.pid = p.id
                        WHERE p.MetaKeywords LIKE "%a%"
                          AND pd.domain_id = "'.mysql_real_escape_string($g_iDomainID).'"
                      ) AS p
                      ORDER BY sum(relevance) DESC'; $sql = 'SELECT *, sum(relevance)                      FROM (                         SELECT p.*, 100 AS relevance                        FROM Products AS p                        INNER JOIN products_domains AS pd                          ON p.id = pd.product_id                        LEFT JOIN NewCollection nc                          ON nc.id = p.newcollection                        LEFT JOIN brandpage_product_sort bps                          ON bps.pid = p.id                        WHERE p.ItemName LIKE "%a%"                         UNION SELECT p.*, 75 AS relevance                        FROM Products AS p                        INNER JOIN products_domains AS pd                          ON p.id = pd.product_id                        LEFT JOIN NewCollection nc                          ON nc.id = p.newcollection                        LEFT JOIN brandpage_product_sort bps                          ON bps.pid = p.id                        WHERE p.MetaKeywords LIKE "%a%"                       ) AS p                      ORDER BY sum(relevance) DESC';
   
 Wat ik graag wil is dat de volgende matches de volgende scores terug geven (bijvoorbeeld)
 
 p.ItemName = 100 punten
 p.ItemSubName = 75 punten
 p.ItemTags = 50 punten
 p.ItemDesc = 25 punten
 
 alle overige 10 punten per stuk.
 
 Ik ben al uren bezig, maar krijg het maar niet werkend helaas. Ik hoop dat iemand mij een antwoord kan geven en -of het script kan schrijven zodat ik kan zien hoe het wel moet en hiervan kan leren zodat we het in het vervolg wel begrijpen en zelf kunnen schrijven haha.
 
 EDIT: Opgelost, de SELECT om het geheel heen dat hoefde niet, na het weglaten van deze werkte het prima!
 |