הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   תוצאות כפולות בחיפוש. (https://hosts.co.il/forums/showthread.php?t=92630)

dor77 09-10-11 13:41

תוצאות כפולות בחיפוש.
 
שלום.
יש לי באתר תוכן שהוא כפול, מה הכוונה?
נגיד והאתר שלי הוא אתר הורדות (נגיד, ככה אוכל להמחיש זאת בצורה הטובה ביותר).
נגיד ישנה הורדה של תוכנה, נגיד אנטטי וירוס כלשהו.
יש באתר מספר גרסאות של האנטי וירוס הזה, ולכל גירסא ישנם מספר גרסאות כי כל גרסא מתאימה למערכת העפלה אחרת.
לצורך הדגמה, קוראים לתוכנה anti virus, אם מקישים בלחיפוש anti virus מקבלים:

anti virus v1.0
os: xp

anti virus v1.0
os:win7

anti virus v1.0
os:mac

anti virus v2.0
os: xp

anti virus v2.0
os:win7

anti virus v2.0
os:mac


אני רוצה שיקבלו ככה:

anti virus v1.0
anti virus v2.0

ושרק בדף הבא אציג את מערכות ההפעלה שקיימות.

איך אני עושה זאת?
איך אני בודק אם משהו נשלף כבר בתוצאות החיפוש ולכן לא להציג אותו יותר?

יש רעיונות?

תודה!

Erez | TrustMedia.co.il 09-10-11 15:01

DISTINCT אם אני לא טועה
או אחרי השליפה תכניס למערך את השמות ותשתמש בarray_unique

IgalSt 09-10-11 15:25

לדעתי אפשר לפתור את זה עובד בשלב של השליפה, ולא כמו שארז הציע.

מה השאילתה שלך?

Haimz 09-10-11 15:49

שמע תציג את זה ככה:

PHP קוד:

<?php

    $query 
= ...
    
    
$array = array();
    
    while(
$row...)
    {
        
$content "תציג מה שבאלך .. $row['name']"// התוכן שלך
    
        
if(array_search$content $array ) )
        {
            continue;
        }
    
        
$array[] = $content;
    }
    
    echo 
implode(""$array);

?>


dor77 10-10-11 13:29

הנה ניסיתי..
אני מקבל:
Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 35 bytes) in /home/****************/search.php on line 420


PHP קוד:




$query 
mysql_query("SELECT * FROM drivers WHERE name LIKE '%$search%'"); 

     
    
$array = array(); 
     
    while(
$row mysql_num_rows($query)) 
    { 
        
$content $row['name']; // התוכן שלך 
     
        
if(array_search$content $array ) ) 
        { 
            continue; 
        } 
     
        
$array[] = $content
    } 
     
    echo 
implode(""$array); 

מה לא בסדר?

תודה.

Haimz 10-10-11 13:39

ציטוט:

נכתב במקור על ידי dor77 (פרסם 821216)
הנה ניסיתי..
אני מקבל:
Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 35 bytes) in /home/****************/search.php on line 420


PHP קוד:




$query 
mysql_query("SELECT * FROM drivers WHERE name LIKE '%$search%'"); 

     
    
$array = array(); 
     
    while(
$row mysql_num_rows($query)) 
    { 
        
$content $row['name']; // התוכן שלך 
     
        
if(array_search$content $array ) ) 
        { 
            continue; 
        } 
     
        
$array[] = $content
    } 
     
    echo 
implode(""$array); 

מה לא בסדר?

תודה.

תנסה
PHP קוד:

$query mysql_query("SELECT * FROM drivers WHERE name LIKE '%$search%'"); 
     
$array = array(); 
     
while(
$row mysql_fetch_array($queryMYSQL_ASSOC)) 

    
$content $row['name']; // התוכן שלך 
     
    
if(array_search$content $array ) ) 
    { 
        continue; 
    } 
     
    
$array[] = $content

     
echo 
implode(""$array); 


IgalSt 10-10-11 15:09

אני לא ממש אוהב את הדוגמאות שיש פה.
כל לופ במערך לבדוק אם כבר הדפסנו את התוכן הזה מול מערך אחר? נשמע לי קצת הזוי.

השגיאה היא כנראה בשליפה מה-DB או באפיון ה-DB עצמו.

האם כל קבוצת "שם תוכנה" - "גירסה" יושבים ב-DB כרשומה אחת?
או שיש רשימת תוכנות ורשימת גירסאות לכל תוכנה?

Haimz 10-10-11 15:24

ציטוט:

נכתב במקור על ידי IgalSt (פרסם 821219)
אני לא ממש אוהב את הדוגמאות שיש פה.
כל לופ במערך לבדוק אם כבר הדפסנו את התוכן הזה מול מערך אחר? נשמע לי קצת הזוי.

השגיאה היא כנראה בשליפה מה-DB או באפיון ה-DB עצמו.

האם כל קבוצת "שם תוכנה" - "גירסה" יושבים ב-DB כרשומה אחת?
או שיש רשימת תוכנות ורשימת גירסאות לכל תוכנה?

אני מסכים איתך

Sagi 10-10-11 15:48

כמו שהציעו לך..
PHP קוד:

$query mysql_query("SELECT DISTINCT name FROM drivers WHERE name LIKE '%$search%'"); 



כל הזמנים הם GMT +2. הזמן כעת הוא 20:57.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ