2017-01-25 5 views
0

Я пытаюсь удалить дубликаты из результата цикла Еогеаспа:Удалить дубликат строки из цикла Еогеаспа

foreach ($tags as $tag) { 
    $sql = "SELECT url,title,image,gift FROM listings LEFT JOIN tags ON listings.id=tags.product_id INNER JOIN tag_names ON tags.tag_id=tag_names.tag_id WHERE tag_names.tag_name=? and id!=$id ORDER BY RAND() LIMIT 5"; 
    $stmt = mysqli_prepare($mysqli, $sql); 
    $stmt->bind_param('s',$tag[0]); 
    $stmt->execute(); 
    $result = $stmt->get_result(); 
    $row = $result->fetch_all(); 

    if (count($row) > 0) { 
     echo etc. 
    } 

Проблемы заключается в том, я не знаю, как пропустить вторя дублирующие продукты под различными тегами. То есть

Этот же продукт может быть под тегом A и под тегом B, но я хочу, чтобы он отображался один раз.

Любая помощь будет оценена по достоинству.

ответ

-1
foreach ($tags as $tag) { 
    $sql = "SELECT distinct url,title,image,gift FROM listings LEFT JOIN tags ON listings.id=tags.product_id INNER JOIN tag_names ON tags.tag_id=tag_names.tag_id WHERE tag_names.tag_name=? and id!=$id ORDER BY RAND() LIMIT 5"; 
    $stmt = mysqli_prepare($mysqli, $sql); 
    $stmt->bind_param('s',$tag[0]); 
    $stmt->execute(); 
    $result = $stmt->get_result(); 
    $row = $result->fetch_all(); 

    if (count($row) > 0) { 
     echo etc. 
    } 
} 

Попробуйте это.

+0

уже пытались, но безуспешно, так как одни и те же продукты под разными тэгами возвращаются в разных массивах. – Gremlin

0

Сначала выберите весь набор данных, используя, например, пункт «IN», а затем итерацию. У вас будет только один запрос.

Проблема в том, что каждый запрос имеет довольно много накладных расходов. Гораздо быстрее выдать 1 запрос, который возвращает 100 результатов, чем выдавать 100 запросов, каждый из которых возвращает результат 1. Это особенно актуально, если ваша база данных находится на другой машине, которая, скажем, на расстоянии 1-2 мс в сети. В этом случае выпуск 100 запросов серийно имеет минимальную стоимость 100-200 мс, даже если они мгновенно могут быть удовлетворены MySQL.

https://secure.phabricator.com/book/phabcontrib/article/n_plus_one/

+0

Спасибо за подсказку. Как связать массив? – Gremlin

+0

http://stackoverflow.com/questions/920353/can-i-bind-an-array-to-an-in-condition –