Ik wil enkel het bovenste resultaat van een while

Status
Niet open voor verdere reacties.

Nie

Gebruiker
Lid geworden
20 aug 2012
Berichten
12
Dit is mijn code:
PHP:
 <?php
error_reporting(E_ALL);
ini_set('display_errors', '0');

include("inc/config.php"); // Contains header etc.
include("cronjobs/verplaats_rotator.php"); // Contains header etc.

$ip=$_SERVER['REMOTE_ADDR'];
$u = $_GET["u"];
$t = $_GET["t"];
$datum=date("d-m-Y", time());

// Stap 1. Kijk of er een lid is aangegeven.
        if($u == ''){
		?>
        Geen lid aangegeven. Advertentie van mij
        <?php
		}else{
			// Stap 2. Kijk of lid bestaat
			$sql_bestaat_lid = "SELECT * FROM  `rotje_leden` WHERE `gebruikersnaam` = '$u'";
            $result_bestaat_lid=mysql_query($sql_bestaat_lid); 
            $num_bestaat_lid =mysql_num_rows($result_bestaat_lid);
						          if($num_bestaat_lid == 0){
								  ?>
                                  Deze gebruiker bestaat niet. Advertentie van mij
                                  <?php  
								  }else{
									  // Stap 3. Bepaal welke linken kans maken om geslecteerd worden.
									  						  if($t == ''){
																  $sql_rot_linken = "SELECT * FROM  `rotje_rotatorlinken` WHERE `lid` = '$u' AND `status` = 'actief'";
                                                                  $result_rot_linken=mysql_query($sql_rot_linken); 
                                                                  $num_rot_linken =mysql_num_rows($result_rot_linken); 
																  
																  ?>
                                                                  Linken met elke tijd.<br>
                                                                  <?php
																  
															  }else{
																  $sql_rot_linken = "SELECT * FROM  `rotje_rotatorlinken` WHERE `lid` = '$u' AND `status` = 'actief' AND `type` = '$t'";
                                                                  $result_rot_linken=mysql_query($sql_rot_linken); 
                                                                  $num_rot_linken =mysql_num_rows($result_rot_linken);
																  ?>
<b>Linken met <?php echo $t;?></b>: <?php echo $num_rot_linken;?> gevonden<br>
                                                                  <?php
																  // Stap 4. Kijken of er linken gevonden zijn
																  						  	if($num_rot_linken == 0){
																								?>
                                                                                                Geen linken gevonden.<br>
                                                                                                <?php
																								
																							}else{
																								// Stap 5. Kijken welke linken er al geklikt zijn en welke niet
																								
																								 while ($rij = mysql_fetch_array($result_rot_linken))
                                                                                                {
	                                                                                            $rotator_link_id=$rij['id'];
	                                                                                            $sql_rot_link_geklikt = "SELECT * FROM  `rotje_rotator_geklikt` WHERE `IP` = '$ip' AND `rotator_link_id` = '$rotator_link_id'";
                                                                                                $result_rot_link_geklikt=mysql_query($sql_rot_link_geklikt); 
                                                                                                $num_rot_link_geklikt =mysql_num_rows($result_rot_link_geklikt);
																													         if($num_rot_link_geklikt == 0){ // We hebben de link nog niet geklikt
																																 
																																 // Registreer het klikje!
																																 $tijd = time();
																																 $type_link = $rij['type'];
																																 $sql_invoegen = "INSERT INTO `chrishn5_main`.`rotje_rotator_geklikt` VALUES ('','$rotator_link_id','$type_link','$tijd','$ip','$datum')";
                                                                                                                                 $send_invoegen = mysql_query($sql_invoegen);
																														     ?>
                                                                                                                             <?php echo $rij['url'];?><br>
                                                                                                                             <?php
																													
																															 } else {
																															 ?>
Geen link gevonden omdat je ze allemaal al gezien hebt! Advertentie van mij.<br>
                                                                                                                             <?php
																															 } // Sluit link al geklikt stap 5.
																			
																		                        } // Sluit de while van stap 5.
																							} // Sluit kijken of er linken gevonden zijn (stap 4)
																  
															  } // Sluit selectie linken met tijd (stap 3)
									  
									  
								  } // Sluit lid bestaat (stap 2)
			
			
} // Sluit lid aangegeven (stap 1)

?>

<?php echo $rij['url'];?> geeft nu dus alle linken weer die het ip-adres nog niet gezien heeft. Maar ik wil dat er maar 1 weergegeven wordt die het ip nog niet gezien heeft. Als ik met iets zoals dit werk:

$counter = 0;
$max = 1;

while (($rij = mysql_fetch_array($result_rot_linken)) and ($counter < $max))

dan is de fout dat ook voor maar 1 link gaat kijken of je die al gezien hebt. Ik heb ook al wat met een break zitten proberen maar dat haalt ook niks uit en maakt het script heel erg traag. Hoe kan ik dit oplossen?

Hopelijk snappen jullie wat ik wil, alvast bedankt.
 
En een LIMIT 1 toevoegen aan de query is de oplossing ook niet?
PHP:
$sql_rot_linken = "SELECT * FROM  `rotje_rotatorlinken` WHERE `lid` = '$u' AND `status` = 'actief' AND `type` = '$t' LIMIT 1";
 
Dan gaat hij ook maar naar 1 link kijken (steeds dezelfde) of ze die al gezien hebben of niet he.
Hij moet van alle actieve linken van dat lid gaan kijken welke er al gezien zijn of niet, en van die dan de bovenste nemen.

Toch bedankt.
 
Je houdt toch bij op welke link wel geklikt is en op welke niet?

Je geeft toch ook een lijst met links terug welke links nog niet aangeklikt zijn?

Overigens kun je redelijk wat optimaliseren in je script volgens mij.
Voor zover ik zie zijn er twee stappen in dit script:
  1. Kijken welke gebruiker het is op basis van gebruikersnaam
  2. Kijken welke links deze gebruiker nog niet heeft geklikt

Controleren welke links er nog open zijn kan in één query
[sql]
SELECT
*
FROM
rotje_rotatorlinken
WHERE
lid = '$u'
AND
status = 'actief'
AND
type = '$t'
AND
id NOT IN (
SELECT
rotator_link_id
FROM
rotje_rotator_geklikt
WHERE
IP = '$ip'
)[/sql]
(Niet getest)
Het specifieke doel van dit script is mij niet duidelijk, maar ik vind het vreemd dat één link gekoppeld is aan één gebruiker.
Wat ik ook apart vindt is dat je links koppelt aan een gebruiker maar een klik koppel je vervolgens aan een IP-adres en niet aan die gebruiker.
 
Wat ik ook apart vindt is dat je links koppelt aan een gebruiker maar een klik koppel je vervolgens aan een IP-adres en niet aan die gebruiker.
Omdat er ook niet-ingelogde leden deze pagina gaan bezoeken.

Ik denk dat die query mij kan brengen tot wat ik wil, ik schrijf het even helemaal opnieuw. Bedankt!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan