Sql join probleem
Ik gebruik in mijn sql een join. maar nu wil ik een where gebruiken van mijn orders
( WHERE website = $websiteid ) maar dan loopt het fout.
Hopelijk kunnen jullie me helpen.
Alvast bedankt
$sql = "SELECT o.id, o.totalprice, o.orderstatus, o.paymentmode, o.`timestamp`, u.firstname, u.lastname FROM orders o WHERE website = $websiteid JOIN usersmeta u WHERE o.uid=u.uid ORDER BY o.id DESC";
echo eens $sql, en kijk eens of deze klopt?
syntax van een SELECT-statement is als volgt:
In die volgorde, en alle keywords komen maar maximaal één keer voor...
In de query van de topicstarter loopt alles hopeloos door elkaar.
De algemene Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
SELECT ...
FROM ...
<andere tabel joins>
WHERE ...
GROUP BY ...
HAVING ...
ORDER BY ...
LIMIT ...
FROM ...
<andere tabel joins>
WHERE ...
GROUP BY ...
HAVING ...
ORDER BY ...
LIMIT ...
In die volgorde, en alle keywords komen maar maximaal één keer voor...
In de query van de topicstarter loopt alles hopeloos door elkaar.
"Alles hopeloos door elkaar" is wel heel erg overdreven :-D
vb:
$sql = "SELECT o.id, o.totalprice, o.orderstatus, o.paymentmode, o.`timestamp`, u.firstname, u.lastname FROM orders o WHERE website = $websiteid JOIN usersmeta u ON o.uid=u.uid ORDER BY o.id DESC";
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
SELECT
o.id, o.totalprice, o.orderstatus, o.paymentmode, o.`timestamp`, u.firstname, u.lastname
FROM
orders o
JOIN
usersmeta u
ON
o.uid=u.uid
WHERE
website = $websiteid
ORDER BY
o.id DESC;
o.id, o.totalprice, o.orderstatus, o.paymentmode, o.`timestamp`, u.firstname, u.lastname
FROM
orders o
JOIN
usersmeta u
ON
o.uid=u.uid
WHERE
website = $websiteid
ORDER BY
o.id DESC;
- Waar komt $websiteid vandaan? vergeet die niet te escapen anders is je query niet veilig.
- Waar komt website vandaan? moet dat niet o.website zijn of u.website?
Gewijzigd op 22/10/2019 17:50:02 door Frank Nietbelangrijk
$query = $db->getQuery(true);
$query->SELECT('id, o.totalprice, o.orderstatus, o.paymentmode, o.`timestamp`, u.firstname, u.lastname')->FROM('orders')
->WHERE('id ='. (INT) 'id' );
$db->setQuery($query);
$results = $db->loadResult();
return $results;
- je maakt gebruikt van een soort van Database Abstractie Laag in je antwoord, bij mijn weten is dat geen standaard functionaliteit; je geeft ook niet aan wat voor library of pakket je hiervoor zou moeten gebruiken
- je geeft geen enkele toelichting (of onderbouwing) waarom dit antwoord het gewenste resultaat zou geven, en/of waarom deze aanpak de voorkeur verdient boven een andere
Ik kan helaas niet anders concluderen dan dat het bovenstaande antwoord nergens op slaat.
En zelfs als dat wel het geval zou zijn, dan loont het nog steeds de moeite om toe te lichten waarom dit zo zou zijn. Het bovenstaande is veel te summier.
$db = $jouw_database_connectie;
Hiermee bedoel ik
$db = new mysqli("localhost", "my_user", "my_password", "world");
Als volgt selecteer ik 'kolommen' uit de 'orders' tabel van de database.
En in de WHERE clause filter ik binnen van die kolom de juiste rij (geen rijen):
Dit werkt alleen in het bewerken van een record en niet bij een nieuwe, want bij een new record is het id-nummer nog niet bekend.