Hey,

Heb een vraagje, ik heb op het moment dit in m'n pagina:

$ac_term = $_GET['id'];
$query = "SELECT * FROM tabel1 where id = :id";
$result = $conn->prepare($query);
$result->bindValue(":id",$ac_term);
$result->execute();

while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
$waarde1 = $row['waarde1'];
$waarde2 = $row['waarde2'];

Hierna wil ik graag met de opgehaalde waardes in een andere tabel zoeken op die waardes.
En die vervolgens in html printen.

Dit zijn dus de stappen:

1. Ik haal via de url de id op
2. met dat id doorzoek ik tabel 1
3. met opgehaalde waardes van tabel 1 wil ik tabel 2 doorzoeken
(extra informatie: "waarde1 en waarde2" zijn rijen in tabel 2)
4. Ik krijg na het doorzoeken van tabel 2 met waarde1 een rij
5. Alle kolommen van de rij worden geprint in html
6. herhaal 4 en 5 voor waarde2

Ik hoop dat iemand me hier mee kan helpen. Ik weet namelijk niet precies waar ik moet beginnen, of ik meerdere select queries moet schrijven of dat ik het in een keer kan doen.
Hoever reikt je SQL kennis?

Google even naar Joins in SQL
Reshad F op 31/03/2014 21:07:52

Hoever reikt je SQL kennis?

Google even naar Joins in SQL


Bedankt, hier had ik nog niet van gehoord maar ziet er wel heel handig uit.

Hoe zou ik het moeten aanpakken als ik dit voor 2 verschillende waardes wil doen?
Meerdere select queries?

[size=xsmall]Toevoeging op 01/04/2014 12:42:06:[/size]

Op het moment heb ik het met een Join.

Weet alleen niet wat de beste manier is om ditzelfde voor meerdere waardes te doen.
Meerdere queries? Array maken en doorzoeken?
Hallo,

Ben er helaas nog steeds niet uitgekomen.
Zou iemand mij misschien op weg kunnen helpen?

Heel erg bedankt!
Colin om je goed op weg te kunnen helpen zou je even een overzicht kunnen geven van je tabelnamen en kolomnamen? Bovendien: vindt je dat nou heel handig om je tabellen een naam te geven als tabel1? Dat valt namelijk nergens mee te associëren. Stel dat je in tabel één accounts opslaat (loginnaam, wachtwoord, email) dan noem je zo een tabel gewoon users of iets dergelijks.
Bedankt voor je reactie! Sorry voor de onduidelijkheid, de namen waren als voorbeeld bedoeld maar bij nader inzien is het misschien voor iemand anders een beetje lastig om te begrijpen. Ik zal even mijn tabellen omschrijven:

Ik heb 2 tabellen.
"Producten" en "Bestellingen"

Die zouden er zo uit kunnen zien:

Producten:
Naam - foto - prijs
shirt - shirt.png - 50
trui - trui.gif - 20
broek - broek2.png - 30
schoenen - schoenen.jpg - 20

Bestellingen:
id - product1 - product2 - product3 - datum
1 - shirt - trui - broek - 11/07/2013
2 - broek - schoenen - shirt - 12/08/2013

De opstelling is misschien vreemd, maar een bestelling kan maximaal maar 3 producten hebben, dit is de bedoeling.

Ik hoop dat je nu mijn verhaal beter begrijpt, ik zal nog even kort uitleggen wat ik nu precies wil, stap voor stap.

-Een persoon gaat naar de url: website.nl/bestelling?id=1
-Op deze pagina zou de informatie van bestelling 1 moeten komen
-Ik doorzoek al mijn bestellingen, heb bestelling 1 gevonden en haal alle waardes van de kolommen op.
-Nu wil ik de producten tonen, en ook de informatie van het product zelf, dus moet nu de tabel "producten" doorzoeken.
-Ik weet dat bestelling 1 een shirt, trui en broek heeft en zoek binnen de tabel "producten" naar deze 3 waardes.
-Ieder product is nu gevonden en ik toon op de pagina de foto en prijs per product.
-Ik heb nu dus een overzicht van alle producten van bestelling 1, waarbij bij elk product de informatie van zichzelf toont.

Op het moment heb ik de stappen 1 tot en met 3 al zelf gemaakt, maar vanaf stap 4 weet ik niet hoe ik verder moet.
Als je naar het voorbeeld kijkt moet ik dus nu naar "trui", "shirt" en "broek" zoeken in de "producten" tabel.

Ik weet nu niet wat de beste en veiligste manier is om dit te doen.



Je zou moeten beginnen met het volgende:

een id (primary key) toevoegen aan de tabel Producten:
Producten:
id - Naam - foto - prijs
1 - shirt - shirt.png - 50
2 - trui - trui.gif - 20
3 - broek - broek2.png - 30
4 - schoenen - schoenen.jpg - 20

dan zou je in de tabel bestellingen enkel dit krijgen:
Bestellingen:
id - product1 - product2 - product3 - datum
1 - 1 - 2 - 3 - 11/07/2013
2 - 3 - 4 - 1 - 12/08/2013

product1 t/m product3 worden sleutelwaardes.

Ik er toch op willen hameren om je database anders op te bouwen:

- met een id er bij is je tabel producten goed.
- maak een tabel Orders: id - klant_id - datum
Hierin zet je alle relevante informatie voor één en dezelfde order behalve de artikelen.
- maak een tabel Orderrules: id - order_id - artikel_id - aantal
Zoals je ziet komt er per regel een verwijzing naar de order en het artikel waar deze bij hoort. daarnaast biedt deze regel een plek om een aantal op te slaan. (Misschien wil de klant wel 2 broeken in plaats van 1).

- Wat nou als er later een artikel uit de verkoop gaat? Dan mag dat artikel niet meer aangeboden worden in de shop. Verwijderen kan niet want dan zitten er in de tabel Orderrules verwijzingen naar records die niet meer bestaan. Je kan dat oplossen door nog een kolom aan artikelen toe te voegen: Leverbaar. Ook zie je wel dat er een kolom 'Verwijderd' wordt toegevoegd. Gebruikers denken dat een record compleet verwijderd is maar in werkelijkheid komt er in de kolom Verwijderd een '1' te staan. Vervolgens ziet de gebruiker het artikel niet meer maar wanneer er in de oude orders gekeken wordt worden de verwijderde artikels wel getoond.
Super! Hier kan ik zeker mee vooruit.
De indeling van de database die je geeft is inderdaad veel beter, ik had aan dingen zoals aantal en leverbaar nog niet eens gedacht.

Ik ga sowieso mijn tabellen opnieuw indelen, maar heb dan nog een vraagje voor het php gedeelte.
Als ik dan een Order heb opgehaald met de bijbehorende Orderrules, hoe haal ik dan de verschillende artikelen op en hoe toon ik de data hiervan in mijn html? Moet ik dan bijvoorbeeld meerdere select queries maken?

In ieder geval heel erg bedankt voor je hulp tot nu toe. Als mijn queries ook nog eens werken dan heb ik een hoop geleerd :)
Importeer deze maar eens in je database en probeer onderstaande queries maar eens

-- phpMyAdmin SQL Dump
-- version 3.5.2.2
-- http://www.phpmyadmin.net
--
-- Machine: 127.0.0.1
-- Genereertijd: 14 apr 2014 om 00:14
-- Serverversie: 5.5.27
-- PHP-versie: 5.4.7

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Databank: `test`
--

-- --------------------------------------------------------

--
-- Tabelstructuur voor tabel `artikelen`
--

CREATE TABLE IF NOT EXISTS `artikelen` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `naam` varchar(50) NOT NULL,
  `verwijderd` tinyint(4) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;

--
-- Gegevens worden uitgevoerd voor tabel `artikelen`
--

INSERT INTO `artikelen` (`id`, `naam`, `verwijderd`) VALUES
(1, 'broek', 0),
(2, 'trui', 0),
(3, 'shirt', 0),
(4, 'schoenen', 0),
(5, 'kousen', 1);

-- --------------------------------------------------------

--
-- Tabelstructuur voor tabel `klanten`
--

CREATE TABLE IF NOT EXISTS `klanten` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `naam` varchar(50) NOT NULL,
  `email` varchar(50) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

--
-- Gegevens worden uitgevoerd voor tabel `klanten`
--

INSERT INTO `klanten` (`id`, `naam`, `email`) VALUES
(1, 'Frank', '[email protected]'),
(2, 'Colin', '[email protected]');

-- --------------------------------------------------------

--
-- Tabelstructuur voor tabel `orderrules`
--

CREATE TABLE IF NOT EXISTS `orderrules` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `order_id` int(11) NOT NULL,
  `artikel_id` int(11) NOT NULL,
  `aantal` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `order_id` (`order_id`,`artikel_id`),
  KEY `artikel_id` (`artikel_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

--
-- Gegevens worden uitgevoerd voor tabel `orderrules`
--

INSERT INTO `orderrules` (`id`, `order_id`, `artikel_id`, `aantal`) VALUES
(1, 1, 1, 1),
(2, 1, 2, 2),
(3, 2, 4, 1);

-- --------------------------------------------------------

--
-- Tabelstructuur voor tabel `orders`
--

CREATE TABLE IF NOT EXISTS `orders` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `orderdatum` datetime NOT NULL,
  `klant_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `klant_id` (`klant_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

--
-- Gegevens worden uitgevoerd voor tabel `orders`
--

INSERT INTO `orders` (`id`, `orderdatum`, `klant_id`) VALUES
(1, '2014-04-13 12:00:00', 1),
(2, '2014-04-14 13:00:00', 2);

--
-- Beperkingen voor gedumpte tabellen
--

--
-- Beperkingen voor tabel `orderrules`
--
ALTER TABLE `orderrules`
  ADD CONSTRAINT `orderrules_ibfk_2` FOREIGN KEY (`artikel_id`) REFERENCES `artikelen` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  ADD CONSTRAINT `orderrules_ibfk_1` FOREIGN KEY (`order_id`) REFERENCES `orders` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

--
-- Beperkingen voor tabel `orders`
--
ALTER TABLE `orders`
  ADD CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`klant_id`) REFERENCES `klanten` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;


[size=xsmall]Toevoeging op 13/04/2014 23:50:55:[/size]

niet verwijderde artikelen laten zien:

SELECT
	*
FROM 
	artikelen
WHERE
	verwijderd < 1

alle orders met klanten info laten zien.

SELECT
	orders.*, klanten.naam, klanten.email
FROM
	orders
LEFT JOIN
	klanten
ON
	klanten.id=orders.klant_id

de orders van klant 2:

SELECT
	orders.*, klanten.naam, klanten.email
FROM
	orders
LEFT JOIN
	klanten
ON
	klanten.id=orders.klant_id WHERE klant_id=2

verkrijg alle regels van order_id 1, met de artikel informatie

SELECT
	orderrules.id, orderrules.aantal, orderrules.artikel_id, artikelen.naam
FROM
	orderrules
LEFT JOIN
	artikelen
ON
	orderrules.artikel_id=artikelen.id
WHERE
	order_id=1
Geweldig! Heel erg bedankt. Ik ga dit allemaal nog even goed bestuderen zodat ik het helemaal begrijp.

En nadat ik de query uitvoer, zou ik de artikelen dan in een array ofzo moeten zetten of waardes aan variabelen toekennen om ze vervolgens in de html te zetten, daar ben ik nog niet helemaal over uit.
uhmm die staan in een array he

<?php

$link = mysqli_connect("localhost", "root", "", "test");

/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}

$query = "
SELECT
orderrules.id, orderrules.aantal, orderrules.artikel_id, artikelen.naam
FROM
orderrules
LEFT JOIN
artikelen
ON
orderrules.artikel_id=artikelen.id
WHERE
order_id=1";

$regel = 1;
if($result = mysqli_query($link, $query))
{
echo 'Er zijn '. mysqli_num_rows($result) . ' rijen gevonden:<br><br>';

while($row = mysqli_fetch_assoc($result))
{
echo '<strong><u>rij ' . $regel++ . '</u></strong><br>';
foreach($row as $key => $value)
{
echo $key . ': ' . $value . '<br>';
}

echo '<br>';
}

mysqli_free_result($result);
}

?>

Reageren