Avatar billede kmc81 Juniormester
15. august 2014 - 15:29 Der 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.


eksempel. Farmer_product indeholder:

farmerid:            farmer_product:

1                    vandmelon
1                    appelsin
1                    aeble
2                    vandmelon
2                    appelsin
2                    banan
3                    vandmelon
3                    banan

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.

Mvh. Kenneth
Avatar billede erikjacobsen Ekspert
15. august 2014 - 20:04 #1
Hvis den ikke skal vise alle 3, hvad skal den så vise? Hvad gør farmerid i chosen_product tabellen?
Avatar billede kmc81 Juniormester
15. august 2014 - 21:17 #2
I farmer_product er listet alle de produkter som bondemændene har. For at kunne holde styr på hvem der har hvad bruger jeg naturligvis farmerid.

chosen_product indeholder de produkter, som brugeren har valgt at søge på.

Når brugeren har søgt på eks. 4 produkter, skal den kun hive de rækker fra farmer_product ud, hvor samme farmerid har alle de valgte produkter.

Det kan godt være at farmerid i chosen_product er overflødig, jeg har med feltet prøvede at sammenligne tabellerne på forskellige måder uden held.

Det kan måske virke lidt kringlet, håber det er til at forstå.
Avatar billede erikjacobsen Ekspert
15. august 2014 - 21:23 #3
Nej, det forstår jeg ikke.

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?
15. august 2014 - 21:41 #4
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

og en tabel farmer_product såsom

id farmer produkt
1    1    1
2    1    2
3    1    3
4    2    1
5    2    2
6    2    4
7    3    1
8    3    4

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.
Avatar billede kmc81 Juniormester
15. august 2014 - 21:41 #5
Ok. Vi har disse værdier i farmer_product:


farmerid:            farmer_product:

1                    vandmelon
1                    appelsin
2                    vandmelon
2                    appelsin
3                    vandmelon
3                    banan


Når brugeren indtaster: vandmelon og appelsin ind i chosen_product, ser den tabel således ud:


sort_by_id:          chosen_product:      ip:

1                    vandmelon            xx.xxx.xxx.xxx
2                    appelsin            xx.xxx.xxx.xxx


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.
Avatar billede kmc81 Juniormester
15. august 2014 - 21:46 #6
sort_by_id bruges til at sortere dem i valgte rækkefølge ved nogle andre visninger. Ip bruges til at hæfte dem til den enkelte bruger.
15. august 2014 - 21:48 #7
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_
Avatar billede erikjacobsen Ekspert
15. august 2014 - 21:52 #8
Man kan ikke bruge IP-nummer til at identificere en bruger.

Der kan sidde mange, ja tusinder, bag eet og samme IP-nummer.

Et IP-nummer kan for samme bruger nemt skifte fra minut til minut hvis man sidder med mobilt netværk (mobil eller tablet på 3G).

Og selv på en fiber eller ADSL kan IP-nummer skifte fra dag til dag.

Det dur ikke.
Avatar billede kmc81 Juniormester
15. august 2014 - 23:13 #9
Christian_Belgien:

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.

Det ser således ud:
http://billedeupload.dk/?v=K0cFR.jpg

Hvis der ikke er nogen farmere med alle de valgte produkter, skal den ikke vise noget.

Tekststrengen bliver nok ret lang, da brugerne har op til 16 valg af produkter. :-0


Olebole:

Jeg var ikke klar over at man kunne sidde så mange bag en ip.
Avatar billede kmc81 Juniormester
16. august 2014 - 19:22 #10
Tak for hjælpen.

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. :-)
16. august 2014 - 20:02 #11
Jamen så blev det hjælp til selvhjælp.  Det var godt det lykkedes for dig.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester