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
Ger van Steenderen op 23/04/2014 22:49:18

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?


<?php
    while ($queryFetch = mysql_fetch_assoc($rResult))
    {
		if (date('m')==1) { $thismonth =  $queryFetch['l2.y_januariy']; }
		else if (date('m')==2) { $thismonth =  $queryFetch['l2.y_february']; }
		else if (date('m')==3) { $thismonth =  $queryFetch['l2.y_march']; }
		else if (date('m')==4) { $thismonth =  $queryFetch['l2.y_april']; }
		else if (date('m')==5) { $thismonth =  $queryFetch['l2.y_may']; }
		else if (date('m')==6) { $thismonth =  $queryFetch['l2.y_june']; }
		else if (date('m')==7) { $thismonth =  $queryFetch['l2.y_july']; }
		else if (date('m')==8) { $thismonth =  $queryFetch['l2.y_august']; }
		else if (date('m')==9) { $thismonth =  $queryFetch['l2.y_september']; }
		else if (date('m')==10) { $thismonth =  $queryFetch['l2.y_october']; }
		else if (date('m')==11) { $thismonth =  $queryFetch['l2.y_november']; }
		else if (date('m')==12) { $thismonth =  $queryFetch['l2.y_december']; }
		
        echo "<tr style='display: table-row;'>";
            echo "<td>" . $queryFetch['c_name'] . "</td>";
            echo "<td>" . $queryFetch['rm_firstname'] . " " . $queryFetch['rm_surname'] . "</td>";
			echo "<td?" . $thismonth . "</td>";
        echo "</tr>";
    }
?>
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'];
}
?>
daarbij: je selecteert helemaal de kolommen l2.y_maandnaam niet.

Doe eens een var_dump($queryFetch )
Racoon smasher op 23/04/2014 23:25:21

[quote="Ger van Steenderen op 23/04/2014 22:49:18"]
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


[/quote]

Maar dat doet ie wel.
Michael - op 24/04/2014 09:33:53

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"
Ivo P op 24/04/2014 09:54:19

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


weet iemand hoe je dit probleem kan oplossen?
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
Ger van Steenderen op 24/04/2014 18:12:02

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...

Reageren