2012-11-14 3 views
1

맞습니다. 정말 누군가가이 문제를 해결할 수 있기를 바랍니다. 기본적으로, 나는 mysql 데이터베이스와 php를 사용하는 회사의 웹 사이트를 재 설계하여 뉴스 아카이브 유형 섹션을 제공한다. 그것은 한 가지를 제외하고는 모두 잘 작동합니다. 스 니펫보기를 제공하고 mysql 데이터베이스의 newsTitle 열을 사용하여 $ _GET 함수를 사용하여 해당 페이지에서 검색 할 수있는 각 앵커의 링크 텍스트에 정보를 저장하는 데 데이터베이스의 정보를 가져옵니다. 문제는 우세하게 고유하지만 많은 newsTitle 항목이 중복되지만 각 내용이 다르다는 것입니다. 이전 웹 사이트에서는 접미사 -0, -1을 추가하여 각 중복의 끝에 (페이지에서) 처리했지만 어떻게해야 할지를 알 수 없습니다.중복을 위해 mysql 열을 검색하고 while 루프에서 변수에 접미사를 추가하십시오.

확인해야 할 변수는 생성 된 $ title/$ url의 다른 모든 버전과 비교하여 $ title/$ url에 들어있는 변수입니다. 참고 사항 : 이전 버전의 웹 사이트에서했던 것처럼 각 페이지를 고유하게 만들기 위해 접미사와 ID를 사용하지 않아야하며 Google에서 링크를 끊거나 '링크 주스'를 잃고 싶지 않습니다. 여기

내 코드입니다 (나는 n00b 그렇게 무서움을 변명입니다) :

mysql_connect($host, $user, $pass) or die ("Unable to connect!"); 

@mysql_select_db($db) or die ("Unable to select database!"); 

$sql = "SELECT * FROM tblnews WHERE YEAR(newsDate) >= $startyear AND YEAR(newsDate) <=  $endyear AND newsPageID = 13 ORDER BY `tblnews`.`newsDate` DESC LIMIT $offset, $rowsperpage"; 

$result3 = mysql_query($sql, mysql_connect($host, $user, $pass)) or die ("Unable to connect!"); 

$querytable="SELECT * FROM tblnews WHERE YEAR(newsDate) >= $startyear AND YEAR(newsDate) <= $endyear AND newsPageID = 13 ORDER BY `tblnews`.`newsDate` DESC"; 

$result=mysql_query($querytable); 


mysql_close(); 

$i= ($currentpage - 1) * 4; 

while ($list = mysql_fetch_assoc($result3)) { 

$title=mysql_result($result,$i,"newsTitle"); 
$titlelower = strtolower ($title); 
$changedwords = array(' is ', ' with ', ' on ', ' to ', ' for ', ' the ', ' at ', ' a ', ' in ', ' of ', '"', "'", ':', '(', ')', ';', '?', '!', '.', ',', '&', '£', '/'); 
$replacements = array('-', '-', '-', '-', '-', '-', '-', '-', '-', '-', '', '', '', '', '', '', '', '', '', '', '', '', '-'); 
$url = str_replace ($changedwords, $replacements, $titlelower); 
$url = str_replace (" ", "-", $url); 
$url = str_replace ("---", "-", $url); 
$url = str_replace ("--", "-", $url); 
$date=mysql_result($result,$i,"newsDate"); 
$shortdescription=mysql_result($result,$i,"newsTeaser"); 
$id=mysql_result($result,$i,"newsID"); 

?> 
<div id="release" <?php if($odd = $i%2) { echo 'style="background-color:#d2d2d2;"'; 
} else { echo 'style="background-color:#dbdbdb;"'; } ?> > 
<p>&nbsp;</p> 
<h3><a href="questionsarticle.php?pagetitle=<?php echo $url; ?>&id=<?php echo $id; ?>"><?php echo $title; ?></a></h3> 
<p style="font-size:12px;color:#666;font-style:italic;">- <?php echo date('l, jS F Y',strtotime($date)); ?></p> 
<p>&nbsp;</p> 
<p><?php echo $shortdescription; ?></p> 
<p>&nbsp;</p> 
<p>&nbsp;</p> 
</div> 
<?php 
$i++; 
} 
?> 
+0

당신이 원하는 것을 할 수있는 방법이 있습니다,하지만 왜 넣어 그들에게 모든 고유하지 :

귀하의 수정 된 쿼리, 각 기사에 대한 오래된 기사의 수에 열을 포함하고있을 것 ID가 다 된 후에? –

+0

더 이상 mysql_ * API를 사용하지 마십시오. 커뮤니티에 의해 사용되지 않습니다. 그것은 매우 불안하고 비효율적입니다. PDO 또는 mysqli 대신 준비된 명령문을 사용하십시오. – markus

+0

newsID 값은 각 레코드마다 고유합니까? – slashingweapon

답변

0

그것은 newsarticle은이 같은 연령을 기준으로되어있는 URL 접미사 하지만 가정해야한다 질문에서 명확하지 않다 newsID에 의해 결정되면 으로 각 중복 제목에 대한 이전 뉴스의 수를 계산하게됩니다.

이것은 tblnews를 자체에 연결하고 제목이 같지만 주어진 기사보다 뉴스 ID가 낮은 행을 계산하여 수행 할 수 있습니다.

SELECT DISTINCT news.*, COUNT(older.newsID) AS older 
FROM tblnews news 
LEFT JOIN tblnews older 
ON older.newsTitle = news.newsTitle 
AND older.newsID < news.newsID 
WHERE year(news.newsDate) >= $startYear 
AND year(news.newsDate) <= $endYear 
AND news.newsPageID = 13 
GROUP BY news.newsID 
ORDER BY news.newsDate DESC; 
+0

축하해! 다른 솔루션을 찾는 사람들을 위해 phpfreaks에 비슷한 광산에서이 옵션이 있습니다 : http://forums.phpfreaks.com/topic/270722-how-do-i-search-an-array-for-duplicates- and-append-suffix / – mevukpaul

관련 문제