Goed.
Dus, de bedoeling is dat het script "suggesties" doet als ge 'n verkeerde link hebt.
Elk bericht heeft één tag in de url, en één titel. Als ge dus iets invoert, en een van deze 2 bestaat niet, moet hij een suggestie doen.

Ik heb het zo geschreven:

<?php if(isset($_GET['titel']) and isset($_GET['tag'])) {
	
	$tag = str_replace("-", "+", mysql_real_escape_string($_GET['tag']));
	$tag_met_spaties = urldecode($tag);
	
	$titel = str_replace("-", "+", mysql_real_escape_string($_GET['titel']));
	$titel_met_spaties = urldecode($titel);
		
		
	$db_resultaat = mysql_query("SELECT 
									n.titel, n.tag, n.datum, u.username, n.nieuws_id 
								FROM 
									nieuws AS n 
								JOIN 
									phpbb_users AS u 
								ON 
									n.gebruikers_id=u.user_id 
								WHERE 
									n.titel LIKE '%". $tag_met_spaties ."%' 
								OR 
									n.tag LIKE '%". $tag_met_spaties ."%' 
								OR 
									n.titel LIKE '%". $titel_met_spaties ."%' 
								OR 
									n.tag LIKE '%". $titel_met_spaties ."%'  
								GROUP BY n.nieuws_id");
		  while($nieuws = mysql_fetch_object($db_resultaat)) {
			  $link ='news.php?tag='. urlencode($nieuws->tag) .'&titel='. urlencode($nieuws->titel);
			  $url = str_replace("+", "-", mysql_real_escape_string($link));
			  echo '<a href="'. $url .'" title="'. $nieuws->titel .'" />'. $nieuws->titel .'</a><br />';
			} 
	} ?>


Nu heb ik het probleem dat hij dit resultaat geeft:

Of bedoelde je:
Kenny heerst
dedeed
Kenny heerst
Kenny heerst
dedeed


Dit terwijl er maar 2 berichten in de database staan;

Kenny heerst ( met tag kenny )
of
dedeed ( met tag kenny )

Iemand een idee hoe ik dit oplos ?
Ik weet niet precies hoe je datamodel eruit ziet. De "lelijke" oplossing zou zijn dat je de resultaten van je query in een array zet en de dubbelen eruit haalt met [php]array_unique[/php]. Maar het zou veel netter zijn als je datamodel correct is opgesteld en je de juiste JOIN en WHERE gebruikt.
Je query klopt van geen kant, je hebt 5 velden in je select en maar 1 in je group by. In je group by horen alle velden uit je select voor te komen tenzij je de kolom in een aggregate functie (count/sum/...) voor komt.

Je zal je query dus opnieuw moeten opstellen.
Datamodel "nieuws":

nieuws
- nieuws_id
- gebruikers_id
- foto
- bericht
- titel
- tag

Voor de rest snap 'k niets van wat jullie zeggen :).
Heeft elke record in de tabel nieuws maar 1 tag?
Ja
Boaz schreef op 05.08.2009 18:47
Je query klopt van geen kant, je hebt 5 velden in je select en maar 1 in je group by. In je group by horen alle velden uit je select voor te komen tenzij je de kolom in een aggregate functie (count/sum/...) voor komt.

Je zal je query dus opnieuw moeten opstellen.

Alle velden in je select tevens in je group by? waarom dat?
ik heb nu

<?php  mysql_query("SELECT DISTINCT titel, tag, nieuws_id
								FROM nieuws WHERE 
									((titel LIKE ('%". $tag_met_spaties ."%' OR '%". $titel_met_spaties ."%'))
										OR 
									(tag LIKE ('%". $tag_met_spaties ."%' OR '%". $titel_met_spaties ."%')))
								GROUP BY nieuws_id"); ?>


en het resultaat:

Kenny heerst ( Hier vind 'm kenny in de tag )
Kenny heerst ( hier vind 'm kenny in de titel )
dedeed (hier vind 'm kenny in de tag )


record in de db:

titel: kenny heerst, tag: kenny
titel: dedeed, tag: kenny


Erik Rijk schreef op 05.08.2009 19:25
[quote='Boaz schreef op 05.08.2009 18:47']...

Alle velden in je select tevens in je group by? waarom dat?[/quote]

Je query is dan simpelweg onjuist, sql server wil 'm niet eens meer uitvoeren, maar ja mysql....

Dit voorbeeld met twee velden:
titel - naam
dhr - Edgar
mv - José
dhr - Oboema

nu zeg ik:
select titel, naam from test group by titel
welke naam wordt dan weergegeven?

Edit:
Wat is het resultaat bij deze query:

SELECT 
  n.titel, n.tag, n.datum, n.nieuws_id 
FROM 
  nieuws AS n 
 WHERE 
  ( n.titel LIKE '%". $tag_met_spaties ."%' 
 OR
  n.titel LIKE '%". $titel_met_spaties ."%' 
  ) OR (
  n.tag LIKE '%". $tag_met_spaties ."%' 
 OR 
  n.tag LIKE '%". $titel_met_spaties ."%' )
Boaz schreef op 05.08.2009 19:43
[quote='Erik Rijk schreef op 05.08.2009 19:25'][quote='Boaz schreef op 05.08.2009 18:47']...

Alle velden in je select tevens in je group by? waarom dat?[/quote]
....
Je query is dan simpelweg onjuist, sql server wil 'm niet eens meer uitvoeren, maar ja mysql....
[/quote]

Oracle ook niet, NOT A SINGLE GROUP BY. Volgens mij mysql in de STRICT MODE ook niet. Blanche heeft hier een mooie tut over geschreven
Boaz schreef op 05.08.2009 19:43


Edit:
Wat is het resultaat bij deze query:

SELECT 
  n.titel, n.tag, n.datum, n.nieuws_id 
FROM 
  nieuws AS n 
 WHERE 
  ( n.titel LIKE '%". $tag_met_spaties ."%' 
 OR
  n.titel LIKE '%". $titel_met_spaties ."%' 
  ) OR (
  n.tag LIKE '%". $tag_met_spaties ."%' 
 OR 
  n.tag LIKE '%". $titel_met_spaties ."%' )


Kenny heerst
dedeed
Kenny heerst
Kenny heerst
dedeed

Reageren