Ik heb samen met iemand de query verder uitgewerkt, maar op een of andere manier wilt die maar 1 resultaat weergeven... hij geeft geen mysql errors weer, maar hij hoort zeker weten wel 2 resultaten te geven, maar door iets wilt hij er maar eentje weergeven.
bij de werkende query had ik nog niet toegevoegd wat ik nog nodig had, maar zodra ik dat toevoegde deed hij dus raar...
sorry als jullie me niet begrijpen, maar ik weet niet hoe ik dit probleem goed uit kan leggen
Werkend:
SELECT companies.c_id,
companies.c_name,
companies.rm_id,
relationship_managers.rm_id,
companies.c_invisibility,
relationship_managers.rm_firstname,
relationship_managers.rm_surname
FROM companies
JOIN relationship_managers ON relationship_managers.rm_id = companies.rm_id
JOIN linkbuilding ON linkbuilding.c_id = companies.c_id AND linkbuilding.y_id = YEAR(NOW())
WHERE c_invisibility = 0
ORDER BY companies.c_id DESC
Niet werkend:
SELECT companies.c_id,
companies.c_name,
companies.rm_id,
relationship_managers.rm_id,
companies.c_invisibility,
relationship_managers.rm_firstname,
relationship_managers.rm_surname,
SUM(l1.y_january) +
SUM(l1.y_february) +
SUM(l1.y_march) +
SUM(l1.y_april) +
SUM(l1.y_may) +
SUM(l1.y_june) +
SUM(l1.y_july) +
SUM(l1.y_august) +
SUM(l1.y_september) +
SUM(l1.y_october) +
SUM(l1.y_november) +
SUM(l1.y_december) +
AS s_totaal
FROM companies
JOIN relationship_managers ON relationship_managers.rm_id = companies.rm_id
JOIN linkbuilding l1 ON l1.c_id = companies.c_id
JOIN linkbuilding l2 ON l2.c_id = companies.c_id AND l2.y_id = YEAR(NOW())
WHERE c_invisibility = 0
ORDER BY companies.c_id DESC
Die aliassen begrijp ik, maar je doet helemaal niets met l2.
Ergo, de join op l2 is nutteloos
jawel op l2.y_id = YEAR(NOW()), want die year now mag zich niet gaan mengen met l1
Toevoeging op 24/04/2014 09:03:30:
Weet trouwens iemand wat er hier fout aan is?
ik krijg deze error:
Notice: Undefined index: l2.y_april in C:\wamp\www\linkbuilding\beta\check.php on line 62
hij denkt dat de rij in de tabel l2.y_april heet maar l2 is de benaming die ik heb gegeven aan de tabel in de SQL. hoe kan ik dat aan de php vertellen?
Je kunt niet de tabel meegeven, je zou dan het veld in de query een andere naam moeten geven.
januariy moet january zijn? En zoals al gezegd, kijk eens naar mysqli/pdo. MySQL is verouderd/deprecated en zal op termijn verdwijnen. MySQLi is de improved versie van MySQL en dus vrij makkelijk om over te stappen.
<?php
SELECT
l2.y_januariy AS january
FROM
linkbuilding AS l2
while ($queryFetch = mysql_fetch_assoc($rResult)) {
echo $queryFetch['january'];
}
?>
Je kunt niet de tabel meegeven, je zou dan het veld in de query een andere naam moeten geven.
januariy moet january zijn? En zoals al gezegd, kijk eens naar mysqli/pdo. MySQL is verouderd/deprecated en zal op termijn verdwijnen. MySQLi is de improved versie van MySQL en dus vrij makkelijk om over te stappen.
<?php
SELECT
l2.y_januariy AS january
FROM
linkbuilding AS l2
while ($queryFetch = mysql_fetch_assoc($rResult)) {
echo $queryFetch['january'];
}
?>
PDO wacht ik wel een tijdje mee en mysqli heb ik al een paar keer uitgeprobeerd om te oefenen, maar ga ik later pas echt mee verder
aan mysqli valt niet zo veel te oefenen. Vooral als je de procedurele manier gebruikt.
Grootste verschil met mysql: er staat een i extra in de functienamen en je bent verplicht om de in mysql optionele parameter "verbinding" mee te geven.
En om je daar bewuster mee om te laten gaan, staat die verbinding als eerste genoemd voortaan.
dus:
- i erbij
- verbinding noemen.
- parameters "andersom"
aan mysqli valt niet zo veel te oefenen. Vooral als je de procedurele manier gebruikt.
Grootste verschil met mysql: er staat een i extra in de functienamen en je bent verplicht om de in mysql optionele parameter "verbinding" mee te geven.
En om je daar bewuster mee om te laten gaan, staat die verbinding als eerste genoemd voortaan.
dus:
- i erbij
- verbinding noemen.
- parameters "andersom"
Bedankt ik zal het sws een keer toepassen
Toevoeging op 24/04/2014 16:44:48:
De query werkt, maar er is 1 bug...
hij geeft nu namelijk wel alles met de tabellen van 2014 weer, maar stel dat een oud bedrijf nooit een tabel 2014 heeft meegekregen, dan wil ik alsnog de bedrijfsnaam en de relatie beheerder zien.
query:
SELECT companies.c_id,
companies.c_name,
companies.rm_id,
companies.c_invisibility,
relationship_managers.rm_id,
relationship_managers.rm_firstname,
relationship_managers.rm_surname,
l2.y_january AS january,
l2.y_february AS february,
l2.y_march AS march,
l2.y_april AS april,
l2.y_may AS may,
l2.y_june AS june,
l2.y_july AS july,
l2.y_august AS august,
l2.y_september AS september,
l2.y_october AS october,
l2.y_november AS november,
l2.y_december AS november,
SUM(l1.y_january) +
SUM(l1.y_february) +
SUM(l1.y_march) +
SUM(l1.y_april) +
SUM(l1.y_may) +
SUM(l1.y_june) +
SUM(l1.y_july) +
SUM(l1.y_august) +
SUM(l1.y_september) +
SUM(l1.y_october) +
SUM(l1.y_november) +
SUM(l1.y_december)
AS s_total
FROM companies
JOIN relationship_managers ON relationship_managers.rm_id = companies.rm_id
JOIN linkbuilding l1 ON l1.c_id = companies.c_id
JOIN linkbuilding l2 ON l2.c_id = companies.c_id
WHERE c_invisibility = 0
AND l2.y_id = YEAR(NOW())
GROUP BY companies.c_id
ORDER BY companies.c_id DESC
met een oude manier van SQL gebruik konden we het probleem wel oplossen, maar dit maakt de SQL te lang.
query op oude manier
SELECT companies.c_id,
companies.c_name,
companies.rm_id,
companies.c_invisibility,
relationship_managers.rm_id,
relationship_managers.rm_firstname,
relationship_managers.rm_surname,
(SELECT y_january FROM linkbuilding l2 WHERE y_id = YEAR(NOW()) and l2.c_id = companies.c_id ) AS january,
(SELECT y_february FROM linkbuilding l2 WHERE y_id = YEAR(NOW()) and l2.c_id = companies.c_id ) AS february,
(SELECT y_march FROM linkbuilding l2 WHERE y_id = YEAR(NOW()) and l2.c_id = companies.c_id ) AS march,
(SELECT y_april FROM linkbuilding l2 WHERE y_id = YEAR(NOW()) and l2.c_id = companies.c_id ) AS april,
(SELECT y_may FROM linkbuilding l2 WHERE y_id = YEAR(NOW()) and l2.c_id = companies.c_id ) AS may,
(SELECT y_june FROM linkbuilding l2 WHERE y_id = YEAR(NOW()) and l2.c_id = companies.c_id ) AS june,
(SELECT y_july FROM linkbuilding l2 WHERE y_id = YEAR(NOW()) and l2.c_id = companies.c_id ) AS july,
(SELECT y_august FROM linkbuilding l2 WHERE y_id = YEAR(NOW()) and l2.c_id = companies.c_id ) AS august,
(SELECT y_september FROM linkbuilding l2 WHERE y_id = YEAR(NOW()) and l2.c_id = companies.c_id ) AS september,
(SELECT y_october FROM linkbuilding l2 WHERE y_id = YEAR(NOW()) and l2.c_id = companies.c_id ) october,
(SELECT y_november FROM linkbuilding l2 WHERE y_id = YEAR(NOW()) and l2.c_id = companies.c_id ) AS november,
(SELECT y_december FROM linkbuilding l2 WHERE y_id = YEAR(NOW()) and l2.c_id = companies.c_id ) AS december,
SUM(l1.y_january) +
SUM(l1.y_february) +
SUM(l1.y_march) +
SUM(l1.y_april) +
SUM(l1.y_may) +
SUM(l1.y_june) +
SUM(l1.y_july) +
SUM(l1.y_august) +
SUM(l1.y_september) +
SUM(l1.y_october) +
SUM(l1.y_november) +
SUM(l1.y_december)
AS s_total
FROM companies
JOIN relationship_managers ON relationship_managers.rm_id = companies.rm_id
JOIN linkbuilding l1 ON l1.c_id = companies.c_id
WHERE c_invisibility = 0
GROUP BY companies.c_id
ORDER BY companies.c_id DESC
Als je dat nu gelijk gezegd had toen ik mijn opmerking plaatste dat die tweede JOIN overbodig was:
....
FROM companies
JOIN relationship_managers ON relationship_managers.rm_id = companies.rm_id
JOIN linkbuilding l1 ON l1.c_id = companies.c_id
LEFT JOIN linkbuilding l2 ON l2.c_id = companies.c_id AND l2.y_id = YEAR(NOW())
WHERE c_invisibility = 0
Vooropgesteld dat er per bedrijf maar 1 record met y_id 2014 in linkbuilding staat
Als je dat nu gelijk gezegd had toen ik mijn opmerking plaatste dat die tweede JOIN overbodig was:
....
FROM companies
JOIN relationship_managers ON relationship_managers.rm_id = companies.rm_id
JOIN linkbuilding l1 ON l1.c_id = companies.c_id
LEFT JOIN linkbuilding l2 ON l2.c_id = companies.c_id AND l2.y_id = YEAR(NOW())
WHERE c_invisibility = 0
Vooropgesteld dat er per bedrijf maar 1 record met y_id 2014 in linkbuilding staat
Bedankt voor de oplossing, we waren inderdaad bezig met een LEFT JOIN, maar hadden toen AND l2.y_id = YEAR(NOW()) er niet achter staan.
We kwamen pas achter het probleem toen we die andere hadden opgelost...