8796 sujets

Développement web côté serveur, CMS

Bonjour à tous et à toutes,

J'ai un petit soucis avec une requête MYSQL, utilisant UNION qui me retourne 4 ligne sur les 5.

Je m'explique.

J'exécute cette requête :

SELECT wcg.id, wcg.total_credit, wcg.total_result, wcg.project_name
FROM worldcommunitygrid AS wcg
WHERE wcg.name = '***aloo8'
UNION
SELECT f.id, f.total_credit, f.expavg_credit, f.project_name
FROM folding AS f
WHERE f.name = '***aloo8'
UNION
SELECT c.id, c.total_credit, c.expavg_credit, c.project_name
FROM climateprediction AS c
WHERE c.cpid='33767f08615415a5f588b8316f30073a'
UNION
SELECT r.id, r.total_credit, r.expavg_credit, r.project_name
FROM rosetta AS r
WHERE r.cpid='33767f08615415a5f588b8316f30073a'
UNION
SELECT m.id, m.total_credit, m.expavg_credit, m.project_name
FROM malaria AS m
WHERE m.cpid='33767f08615415a5f588b8316f30073a'
ORDER BY project_name ASC


Si je l'exécute en direct dans PhpMyAdmin, aucun soucis, j'ai bien un tableau complet avec 5 lignes de résultat.

Par contre, si je l'exécute dans mon script, il ne me retourne que 4 lignes de résultat. Si j'inverse l'ordre des résultat, il me manque toujours une ligne de résultat, mais la première qui me manquais apparaît ...

Quand je compte le nombre de résultat, il me dis bien 5 résultats .... mais même en faisant un "print_r" je n'ai que 4 lignes de résultats Smiley ohwell

Merci mille fois pour votre aide, car je vais devenir chauve ! Smiley lol

Script :

while($ban_data = mysql_fetch_assoc($ban_exe))
	{
	include(fonctions.php');
	
	if($ban_data['cpid'])
		{
		$end_search = "cpid='".$ban_data['cpid']."'";
		}
		else
			{
			$end_search = "name='".$ban_data['username']."'";
			}
			
$data_st_req = "SELECT wcg.id, wcg.total_credit, wcg.total_result, wcg.project_name
FROM worldcommunitygrid AS wcg
WHERE wcg.name = '".$ban_data['username']."'
UNION
SELECT f.id, f.total_credit, f.expavg_credit, f.project_name
FROM folding AS f
WHERE f.name = '".$ban_data['username']."'
UNION
SELECT c.id, c.total_credit, c.expavg_credit, c.project_name
FROM climateprediction AS c
WHERE c.".$end_search."
UNION
SELECT r.id, r.total_credit, r.expavg_credit, r.project_name
FROM rosetta AS r
WHERE r.".$end_search."
UNION
SELECT m.id, m.total_credit, m.expavg_credit, m.project_name
FROM malaria AS m
WHERE m.".$end_search."
ORDER BY total_credit ASC";

$data_st_exe = mysql_query($data_st_req);
$data_st = mysql_fetch_assoc($data_st_exe);
$nombre_projets = mysql_num_rows($data_st_exe);

	switch($nombre_projets)
		{
		case 1:
			$destination = imagecreatefromjpeg('banniere/fond_moins_de_4_projets.jpg');
			break;
		case 2:
			$destination = imagecreatefromjpeg('banniere/fond_moins_de_4_projets.jpg');
			break;
		case 3:
			$destination = imagecreatefromjpeg('banniere/fond_moins_de_4_projets.jpg');
			break;
		case 4:
			$destination = imagecreatefromjpeg('banniere/fond_4_projets.jpg');
			break;
		case 5:
			$destination = imagecreatefromjpeg('banniere/fond_5_projets.jpg');
			break;
		}
	
	while($data_st = mysql_fetch_assoc($data_st_exe))
		{
			if($data_st['id'])
				{

Modifié par Super_baloo8 (30 Jan 2009 - 18:58)
Hello Smiley smile ,

Super_baloo8 a écrit :

$data_st_exe = mysql_query($data_st_req);
$data_st = mysql_fetch_assoc($data_st_exe);
$nombre_projets = mysql_num_rows($data_st_exe);

switch($nombre_projets)
{
...
}

while($data_st = mysql_fetch_assoc($data_st_exe))
{
if($data_st['id'])
{
La première fois que tu exécute mysql_fetch_assoc($data_st_exe) le curseur passe du premier résultat au second. Ce qui fait que la seconde fois que tu exécute mysql_fetch_assoc($data_st_exe) il commence par le second résultat. Smiley cligne

Un petit reset devrait régler le problème.
Modifié par Heyoan (30 Jan 2009 - 19:07)
Quel imbécile !

Merci Heyoan, et bonne année ! (il n'est pas encore trop tard ouf Smiley lol )

(Faut que je pense à aller voir l'ophtalmo Smiley decu )
Super_baloo8 a écrit :

bonne année ! (il n'est pas encore trop tard ouf Smiley lol )
A toi aussi ! Smiley hippy
Modifié par Heyoan (30 Jan 2009 - 19:07)