[SQL] Complexe sql join incl ORDER BY werkt niet..

Status
Niet open voor verdere reacties.

marijtje1986

Gebruiker
Lid geworden
14 nov 2008
Berichten
11
Hallo,

Momenteel heb ik onderstaande sql query slechts gedeeltelijk werkend:

SELECT *, COUNT(partner.productid) AS partneraantal
FROM (product LEFT JOIN partner ON product.id = partner.productid) LEFT JOIN shop ON partner.shopnaam = shop.shopshopnaam
WHERE product.categorie = '#*$!X' AND product.hoofdmodel = '1'
GROUP BY product.naam
ORDER BY product.naam ASC, shop.shopcpc DESC

Echter, de gegevens komen netjes naar voren uit de drie tabellen "product", "partner" en "shop", maar de "ORDR BY shop.shopcpc" schijnt niet te werken.

<b>Toegang tot de pagina:</b>
Link: kindervvagensupply "punt" nl "slash" Voorbeeld "slash" Kinderwagens "slash" (je schrijft dus Kinderwagensu..., Voorbeeld en Kinderwagens met hoofdletters)

inlog: Helpmij
ww: Helpmij



<b>Voorbeeld</b>
product.id is uniek (1000). In partner.productid bevindt 1000 zich 4 keer waar op dezelfde rij ook 4 verschillende partner.shopnaam'en zijn. Deze zijn weer gelinkt aan shop.shopshopnaam met de daarbij behorende shop.shopcpc. Ik zou graag willen dat product.id wordt gelinkt aan partner.productid waar shop.shopcpc het hoogste is (dus desc).

GROUP BY heb ik toegevoegd omdat zonder deze command product.id 4 keer wordt geoutput, en dat is niet de bedoeling. Iedere unieke product.id dient slechts 1 keer te worden getoond in een lijst met de daarbij behorende hoogste shop.shopcpc.

Getekend:

product.id
1000

rij --- partner.productid --- partner.shopnaam
1 --- 1000 --- shop A
2 --- 1000 --- shop B
3 --- 1000 --- shop C
4 --- 1000 --- shop D

rij --- shop.shopshopnaam --- shop.shopcpc
1 --- shop A --- 10
2 --- shop C --- 20
3 --- shop B --- 40
4 --- shop D --- 5

Hier zou het dus zo moeten zijn dat rij 3 uit partner en rij 2 uit shop moeten worden gekoppeld aan product.id vanwege de hoogste shop.shopcpc. Dit gebeurd echter niet.



DATABASE INFO:

CREATE TABLE `product` (
`id` int(11) NOT NULL auto_increment,
`naam` varchar(500) character set latin1 collate latin1_general_ci default NULL,
`hoofdmodel` varchar(500) default NULL,
`merk` varchar(500) character set utf8 default NULL,
`kleur` varchar(500) character set utf8 default NULL,
`categorie` varchar(500) character set latin1 collate latin1_general_ci default NULL,
`subcategorie` varchar(500) character set latin1 collate latin1_general_ci default NULL,
`prijs` double(255,0) default NULL,
`adviesprijs` double(255,0) default NULL,
`btw` double(255,0) default NULL,
`slug` varchar(500) character set latin1 collate latin1_general_ci default NULL,
`content` longtext character set latin1 collate latin1_general_ci,
`description` text character set latin1 collate latin1_general_ci,
`usp` varchar(1000) character set utf8 default NULL,
`invoerdatum` date default NULL,
`groepnummer` varchar(255) character set utf8 default NULL,
`ean` varchar(255) character set utf8 NOT NULL,
`levertijd` varchar(500) character set latin1 collate latin1_general_ci NOT NULL,
`wettelijk` varchar(255) character set utf8 default NULL,
`bandenaantal` varchar(255) character set utf8 default NULL,
`zwenkwielen` varchar(255) character set utf8 default NULL,
`vergrendelen` varchar(255) character set utf8 default NULL,
`bandenlucht` varchar(255) character set utf8 default NULL,
`rug verstelbaar` varchar(255) character set utf8 default NULL,
`veiligheidsbeugel` varchar(255) character set utf8 default NULL,
`duwbeugel verstelbaar` varchar(255) character set utf8 default NULL,
`voetensteun verstelbaar` varchar(255) character set utf8 default NULL,
`bijzonderheden` varchar(255) character set utf8 default NULL,
`omkeerbaar` varchar(255) character set utf8 default NULL,
`inclusief` varchar(1000) character set utf8 default NULL,
`actie` varchar(1000) character set utf8 default NULL,
`leeftijd` varchar(1000) character set utf8 NOT NULL,
`isofix` varchar(255) default NULL,
`combi` varchar(255) character set utf8 default NULL,
`combi inhoud` varchar(255) character set utf8 default NULL,
`jaar` varchar(255) character set utf8 default NULL,
`duo` varchar(255) character set utf8 default NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`,`slug`)
) ENGINE=MyISAM AUTO_INCREMENT=16506 DEFAULT CHARSET=latin1;



-- Table "partner" DDL

CREATE TABLE `partner` (
`producturl` varchar(1000) collate latin1_general_ci default NULL,
`partnerid` int(15) NOT NULL,
`productnaam` varchar(255) collate latin1_general_ci default NULL,
`productdescription` varchar(1000) collate latin1_general_ci default NULL,
`productprijs` varchar(255) collate latin1_general_ci default NULL,
`productimageurl` varchar(1000) collate latin1_general_ci default NULL,
`productcategorie` varchar(255) collate latin1_general_ci default NULL,
`productsubcategorie` varchar(255) collate latin1_general_ci default NULL,
`productmerk` varchar(255) collate latin1_general_ci default NULL,
`shopnaam` varchar(25) collate latin1_general_ci NOT NULL,
`productid` int(15) default '0',
`partneridproductid` varchar(15) collate latin1_general_ci default NULL,
KEY `id` (`productid`,`shopnaam`,`partnerid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;


-- Table "shop" DDL

CREATE TABLE `shop` (
`shopshopnaam` varchar(20) collate latin1_general_ci NOT NULL,
`shopinformatie` text collate latin1_general_ci,
`infourl` varchar(255) collate latin1_general_ci default NULL,
`shopcpc` int(6) default NULL,
PRIMARY KEY (`shopshopnaam`),
KEY `id` (`shopshopnaam`,`shopcpc`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;



(sommige variabelen zijn qua soort al geupdate, dit is een iets ouder overzicht. Zo heeft Jaar bijv een date gekregen).

Ik hoop dat iemand kan helpen!
 
Laatst bewerkt:
Je begint je select statement met Select *,... Verwijder de *, en noem alle velden die je wilt zien. Noem alle velden in de group by die je wilt groeperen m.u.v. de velden waar je een agregratie functie op los wilt laten zoals Count e.d.

Enjoy!
 
Ik zou beginnen met normaliseren, want dit is een onwerkbare tabel.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan