14. november 2007 - 04:29Der er
13 kommentarer og 1 løsning
Hvordan henter jeg data fra en tabel på baggrund af en anden tbl?
Hej, Jeg har en lille indkøbskurv og har lidt problemer med hvordan jeg henter det rigtige datasæt. Jeg har mine kategorier og produkter i hver sin tabel, med en kategori ID som fremmed nøgle i min produkter tabel. Nu er det sådan at jg kun vil hente de kategorier hvor produkterne i disse kategorier har flere end et produkt på lager. Men hvordan er det lige jeg gør det? Følgende virker, men så mangler jeg den nok vigtigste data fra kategori tabellen, nemlig primær nøglen cat_id:
SELECT cat_parent_id, cat_name, cat_image, cat_description, pd_qty FROM tbl_category c, tbl_product p WHERE p.cat_id = c.cat_id AND p.pd_qty >= '1' ORDER BY cat_name
Når den er med får jeg følgende fejlmeddelse: #1052 - Column 'cat_id' in field list is ambiguous
Nogen gode forslag til hvordan jeg får cat_id med?
Jeg opdager lige at phpmyadmin virkede det fint, men der er noget der går galt i min php. Ved du om den hiver kollonne navnet c.cat_id eller cat_id ind?Det virker som om dete r der problemet er nemlig?!
Det må du undskylde men jeg forstår ikke dit svar. Jeg har brug for cat_id men det virker som om den hiver c.cat_id ind (dvs. med et c. først), selv om i phpmyadmin den viser den rigtige kolonne.
jeg har desværre fundet ud af en anden fejl... hvis jeg kun henter ting fra kategorier får jeg 37 output rækker, sætter jeg så krøllen ind med at den kun skal tage de kategorier hvor der er produkter i kommer den frem med 75 output rækker. Det skulle jo egentlig have blevet mindre. Hvordan kan det være og kan det fikses?
Dvs. jeg har brug for at få en kategori vist hvis der er en lagerbeholdning på en eller flere i hver af de produkter som findes i kategorien! Er der bare et produkt som har 1 stk skal kategorien vises!
Gir det mening?
Nuværende SQL ser altså således ud: SELECT c.cat_id AS cat_id, cat_parent_id, cat_name, cat_image, cat_description, pd_qty FROM tbl_category c, tbl_product p WHERE p.cat_id = c.cat_id AND p.pd_qty >= '1' ORDER BY cat_id, cat_parent_id
Vil du have de kategorier som har mindst et produkt med mere end 1 på lager eller vil du have de kategorier hvor produkterne tilsammen har mere end 1 på lager.
Det første lyder mest rimeligt.
Prøv:
SELECT cat_id,cat_parent_id,cat_name,cat_image,cat_description FROM tbl_category WHERE cat_id IN (SELECT cat_id FROM tbl_product WHERE pd_qty > 1)
Nå men havde skrevet et svar i nat til det her, men det er væk, var ellers sikker på jeg så det tilføjet...men det er nu ikke første gang det er sket. jeg prøver igen!
Du havde helt ret i at det var den måde jeg skulle bruge sætningen. Super smart at man bare kan sætte den der nye SELECT ind! Så det ser rigtigt ud, eller dvs. (jeg tør næsten ikke sige det) men jeg kunne nu se at der er noget andet der så mangler. Undskyld.
Jeg har sat det sådan op at man har "over" og under kategorier, og med den sætning som du har foreslået kommer alle kategorier frem der indeholde produkter med mere end en på lager, desværre kommer overkategorierne ikke med. Jeg har nemlig i min php sagt at der ikke må være produkter i overkategorierne. Så det jeg har brug for at tilføje er at over kategorier skal tages med hvis underkategorien er med. Jeg har eksempelvis en overkategori med cat_id 32 (med cat_parent_id = 0), og 2 under kategorier med cat_id 35 og 43 (deres cat_parent_id er så 32). Kan det lade sig gøre?
Jeg har prøvet at sætter "OR cat_parent_id = 0" og lave en UNION men begge resulterede i at jeg fik alle overkategorier ligemeget om der var noget i underkategorierne eller ej.
Tusind tak for din hjælp, det er fedt at lære mere om Mysql. S
Ok det prøver jeg. Tak for al din hjælp. Det var super! :-)
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.