15. august 2014 - 15:29Der er
10 kommentarer og 1 løsning
muligvis multi arrays
Hej eksperter
Jeg tror at jeg skal bruge noget multiarrays og sammenligne. Håber i kan hjælpe mig med en løsning.
Jeg har to tabeller:
I tabellen farmer_product er der felterne farmerid og farmer_product.
I tabellen chosen_product er der felterne farmerid og chosen_product.
Den skal først finde ud af hvilke produkter som hver farmerid har, dernæst skal den kun hive de rækker hvor det farmerid har de produkter, der er valgt i chosen_product.
Hvis brugeren ( i chosen_product)så har valgt: vandmelon og appelsin, skal den kun vise 1 og 2. Hvis brugeren kun vælger vandmelon, skal den ikke vise alle tre.
Du må gerne svare på "Hvis den ikke skal vise alle 3, hvad skal den så vise?"
Og jeg har ingen idé om hvad farmerid gør i chosen_product. Kan du give et par eksempler på værdier i chosen_product tabellen, efter at brugeren har tastet sine ønsker ind?
Jeg har nu set fire spørgsmål de sidste par dage. For at kunne deltage i at foreslå løsninger må jeg forstå hvad det er du vil med din applikation. Er det således, at du giver brugerne en liste af alle produkter, og brugerne kan så vælge et antal af disse produkter, og derefter skal brugerne have en liste af de farmere der har alle de valgte produkter? Du bruger uden tvivl php til at præsentere listerne til brugerne og indsamle deres valg, og du gemmer dine data i mysql. Men jeg er ikke sikker på at jeg forstår de tabeller du nævner. Hvis jeg skulle gøre det ville jeg nok have en tabel med alle produkterne såsom:
produkt id navn 1 vandmelon 2 appelsin 3 æble 4 banan
og en tabel med farmere såsom:
id navn 1 Jens Bondemand 2 Hans Landmand 3 Mads Jordbruger
altså Jens Bondemand har vandmeloner, applesiner, og æbler, Hans Landmand har vandmeloner, appelsiner, og bananer, og Mads Jordbruger har vandmeloner og bananer.
Med mindre det er hensigten at gemme de valg brugerne gør til senere brug kan jeg ikke se nogen grund til at have en database tabel med chosen_product.
Og så en skets til en mulig løsning (hvis jeg har forstået problemstillingen rigtigt.) Den liste du giver brugerne til at vælge produkter fra indeholder produkt id'er og produkt navne. Du placerer produkt id'erne fra brugerens valg i en array, og så bygger du ved hjælp af en løkke en tekststreng såsom "SELECT f.id, f.navn FROM farmer f JOIN farmer_produkt fp ON f.id = fp.farmer WHERE EXISTS(SELECT product FROM farmer_ product WHERE product = [brugerens første valg]) AND EXISTS (SELECT product FROM farmer_product WHERE product = [brugerens andet valg]) AND [o.s.v. for brugerens tredje og følgende valg.] Når du så har tekststrengen sender du den til mysql som en query.
Det er så meningen at den kun skal udskrive farmerid 1 og 2, fordi de begge indeholder både vandmelon og appelsin.
Jeg har fjernet farmerid fra chosen_product, kan godt se den ikke giver nogen mening. Jeg har siddet så længe med det, at jeg begyndte at sætte data ind fra den anden tabel. Doh.
Hvis du kun skal bruge brugernes valg til at udskrive en liste af farmere er der ingen grund til at lave en database tabel derover. Det går nemmere med at gemme brugerens valg i en array.
Og så et spørgsmål: Hvad skal der ske, hvis der ikke er nogen farmere der har alle produkter en bruger har valgt_
Jeg bruger chosen_product til ellers at kunne vise brugerne deres valg. Valgene bliver i øvrigt vist på Google map hen ad vejen, så de vælger ikke alle produkterne som de vil søge på én gang.
Jeg fik selv løst det ved at oprette en kolonne til hvert produkt i tabellen farmer_products og chosen_product, herefter sammenlignede jeg dem i forespørgslen. Idéen fik jeg efter Christian_Belgien's forslag med at oprette en tabel til produkterne. Så du har fortjent pointene. :-)
Jamen så blev det hjælp til selvhjælp. Det var godt det lykkedes for dig.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.
Det er blevet kaldt ”det største it-nedbrud i historien” og omkostningerne kan nemt løbe op i syv milliarder kroner: Men hvem skal betale for Crowdstrikes fejl?