Question

Je n'ai eu affaire à un à-un en php à ce jour, mais je suis bloqué sur un problème qui implique un à plusieurs. Je suis assis sur ce pendant quelques jours sans chance, donc je suis désespéré pour quelqu'un d'intervenir et de me montrer une solution avant que je perds mon esprit.

Dans ma base de données une série de urls, qui sont reçus par une requête SELECT avec d'autres champs, des tables différentes. Chaque URL a au moins une catégorie qui lui est associée, mais peut avoir plusieurs catégories. Donc, dans mes résultats que je pourrais voir quelque chose qui ressemble un peu à ceci:

link_id = 3   url= 'http://www.somesite1.com'   category = 'uncategorised'
link_id = 4   url= 'http://www.somesite2.com'   category = 'travel'
link_id = 4   url= 'http://www.somesite2.com'   category = 'fun'
link_id = 4   url= 'http://www.somesite2.com'   category = 'misc'
link_id = 3   url= 'http://www.somesite3.com'   category = 'uncategorised'

J'ai cela fonctionne, en quelque sorte. Quand je boucle à travers et les imprimer, en utilisant une boucle while et mysql tableau Fetch, le résultat ressemble exactement comme il le fait ci-dessus. Des thats très bien, sauf que j'ai besoin est pour lui lire quelque chose comme:

link_id = 4   url = 'http://www.somesite2.com'   category = 'travel fun misc'

Alors que, fondamentalement, toutes les catégories pour chaque URL sont combinées en quelque sorte, comme ils sont imprimés. Ma première tentative m'a conduit à essayer une nichée while, mais cela n'a pas fonctionné et je ne suis pas sûr si cela est possible. En dehors de cela, je me demande si je pourrais avoir besoin d'un tableau multidimensionnel (estimation complète, je ne l'ai jamais eu à utiliser un avant).

Je commande ces résultats par ID de lien comme ci-dessus, donc je sais que si l'identifiant de lien dans l'itération de boucle de courant, correspond à celui de la dernière itération - alors j'ai quelque chose qui a plus d'une catégorie .. Je pense Je suis vraiment proche, mais je ne peux pas le comprendre.

Toutes les idées?

Était-ce utile?

La solution

Il y a aussi la fonction « GROUP_CONCAT » dans une base MySQL. Cela devrait faire exactement ce que vous voulez atteindre.

Quelque chose comme:

SELECT url, GROUP_CONCAT(category) AS categories FROM yourtable GROUP BY url 

Autres conseils

Vous devez utiliser une table de connexion.

1er vous avez une table de liens

id = 1 url = something
id = 2 url = something else

Ensuite, vous avez une table des catégories

id = 1 category = something
id = 2 category = something else

Ensuite, vous avez une table de connexion

url_id = 1 category_id = 1
url_id = 1 category_id = 2
url_id = 2 category_id = 1

Cela devrait vous aider à démarrer atleast.

vous devez utiliser un algorithme de rupture de contrôle.

set last_link variable to null
set combined_category to null
exec query

loop over result set {
    if last_link == null {
        last_link=fetch_link
    }
    if fetch_link==last_link {
        set combined_category+=ltrim(' '.fetch_category)
    } else {
        display html for last_link and combined_category
        set last_link=fetch_link
        set combined_category=fetch_category
    }
}//loop

display html for last_link and combined_category

je événement « affichage html » comme générique « travail », vous pouvez pousser ceci à une structure de réseau, etc. à la place ...

utiliser un tableau calée sur le itérer identifiant et URL à travers les valeurs et ajouter comme suit:

$link_categories[ $id ] .= $category." ";

$result = mysql_query("SElECT * FROM LINKS");

$link_categories = array();

while ($row = mysql_fetch_array($result,MYSQL_ASSOC))
{
    if (!isset($link_categories[$row['link']]))
        $link_categories[$row['link']] = " ";
    else
        $link_categories[$row['link']] .= " ";

    $link_categories[$row['link']] .= $row['category'];
}

print_r($link_categories);

Résultats dans:

Array
(
    [http://a.com] =>  test evaluate performance
    [http://b.com] =>  classify reduce
    [http://c.com] =>  allocate
)

Ce n'est pas la voie « droit » de le faire - vraiment les relations doivent être définies dans un Table séparée avec une relation 1-many.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top