edit// inmiddels opgelost door hulp, zie onderstaande reacties
Ik heb een probleempje waar ik maar niet uit kom.
Ik heb nu deze query:
Voor deze 2 tabellen:Code:SELECT products.* FROM products LEFT JOIN product_categorie ON (products.c_id = product_categorie.id) WHERE product_categorie.title=:title AND products.country=:country
Wat ik wil is in een while loop de producten van een bepaalde categorie die word opgehaald met de titel van de categorie.Code:CREATE TABLE IF NOT EXISTS `products` ( `id` int(11) NOT NULL AUTO_INCREMENT, `c_id` int(11) NOT NULL, `title` varchar(255) NOT NULL, `description` text NOT NULL, `country` varchar(5) NOT NULL, `image` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ; CREATE TABLE IF NOT EXISTS `product_categorie` ( `id` int(13) NOT NULL AUTO_INCREMENT, `title` varchar(255) NOT NULL, `description` text NOT NULL, `image` varchar(255) NOT NULL, `country` varchar(255) NOT NULL, `url` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=13 ;
- MYSQL Joins
-
15-03-2010, 17:05 #1gast Guest
MYSQL Joins
Laatst aangepast door Melvin van den Bout : 15-03-2010 om 17:40
-
In de schijnwerper
-
15-03-2010, 17:12 #2
- Berichten
- 256
- Lid sinds
- 14 Jaar
Wat krijg je nu als output en wat had je verwacht?
Kun je toelichten wat de dubbele punten in de query betekenen?
-
15-03-2010, 17:20 #3ProAffiliate
- Berichten
- 506
- Lid sinds
- 16 Jaar
Zoiets?
Code:SELECT p.* FROM products p LEFT JOIN product_categorie c ON (p.c_id = c.id) WHERE c.title='hier_de_categorie_naam'
-
15-03-2010, 17:30 #4Particulier
- Berichten
- 756
- Lid sinds
- 15 Jaar
Code:SELECT products.* FROM products,product_categorie WHERE product_categorie.title='naam' AND products.c_id = product_categorie.id
-
15-03-2010, 17:30 #5gast GuestCode:
/** * * Return product from the categorie * */ public function getproducts() { // select the products $sql = "SELECT products.* FROM products LEFT JOIN product_categorie ON (products.c_id = product_categorie.id) WHERE product_categorie.title=:title AND products.country=:country"; // Prepare and execute database connection $stmt = db::getInstance()->prepare($sql); $stmt->bindParam(':title', $this->categorie, PDO::PARAM_STR, 255); $stmt->bindParam(':country', $this->language, PDO::PARAM_STR, 255); $stmt->execute(); // fetch as $data while($data = $stmt->fetch(PDO::FETCH_ASSOC)) { $this->products[] = $data; } return $this->products; }
@Michel -> Dan krijg ik dezelfde output.
Nu krijg ik alle categorieën (product_categorie) en de producten (products) van de juiste categorie.
Ik vind het maar raar, dacht dit dit zo gewoon moest werken.
edit// Bedankt "Z. Tas" Het werkt nu.
-
15-03-2010, 18:18 #6Particulier
- Berichten
- 756
- Lid sinds
- 15 Jaar
Graag gedaan ;)
Enkele tips/opmerkingen:
products.c_id = int(11)
product_categorie.id = int(13)
Dit gaat "in theorie" problemen opleveren wanneer product_categorie.id > int(11).
(in de praktijk zal je dit aantal waarschijnlijk niet overschrijden)
Ik raad je int(9) aan voor beide tabellen, dit is ruim voldoende. (max. 999.999.999 records)
--
Daarnaast zou je kunnen kijken naar InnoDB, dit heeft enkele voordelen:
- Mocht product_categorie.id wijzigen, wordt dit automatisch aangepast in de products tabel.
- De product_categorie kan niet verwijderd worden wanneer er nog producten aan gekoppeld zijn.
-
15-03-2010, 18:25 #7gast Guest
Bedankt voor de tips, ik ga er naar kijken.
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic