Requête SQL pour afficher des "Related Items"

Bonjour à tous

J’aimerai créer une requête sql pour afficher des related items, autrement dit : des objets identiques.

J’ajoute plusieurs objets à ma db, en leur spécifiant à chaque fois un type. Sur la page de mon site où j’affiche les objets, j’aimerai avoir une petite liste des objets ayant le même type que l’objet affiché.

J’ai essayé plusieurs requêtes SQL avec des LIKE …, mais ca n’affiche rien. :frowning:

mysql_query('SELECT * FROM `collection_item_form` WHERE type LIKE "%'.$donnees[type].'%" ');

Berk.

Et ça :

mysql_query(‘SELECT * FROM collection_item_form WHERE type LIKE "%’.mysql_real_escape_string($donnees[‘type’]).’%" ');

J’ai essayé… ca n’affiche rien non plus =/

J’ai collé la ligne dans longlet SQL de ma db… il n’affche pas d’erreur, mais il n’affiche rien non plus lol
Edité le 14/07/2009 à 19:49

Y a quoi dans ta colonne type?

Les objets que j’ajoute sont des cd (albums, singles, etc…) dans Type, je met le nom du cd ajouté (sehnsucht, amerika, ich-will, etc…)

J’ai plusieurs editions pour chaque CD, donc il y a plusieurs CD qui ont le meme type. Donc si j’affiche un “sehnsucht”, il faudrai qu’il affiche tous les autres objets qui ont le type “sehnsucht’” :slight_smile:

Dans ce cas, l’opérateur “=” suffit. En revanche, pourquoi il ne trouve pas, même en lançant la requête directement, ça reste un mystère que seul toi peut résoudre :slight_smile:

A tout hasard, fait un select type, count(*) from collection_item_form group by type

Si tu n’as rien, c’est que ton problème est là :slight_smile:

Le count fonctionne, il m’affiche tous les types avec le nombre a coté :slight_smile:

Et je n’ai pas bien saisi comment utiliser ton “=”

Et si tu remplace un des types tel que :

mysql_query(‘SELECT * FROM collection_item_form WHERE type = ‘%’.mysql_real_escape_string($donnees[‘type’]).’%’ ');

LIKE c’est un opérateur gourmand, = vérifie juste que le type vaut ce que tu lui passe. Cela correspond plus à ce que tu veux faire, sauf si tu peux rechercher par bout de type (genre cd*).

N’affiche rien non plus

Mais je me demandais si a la place de WHERE type, il fallais pas mettre l’équivalent d’un “echo”, pour qu’il liste le type de l’objet en cours. Car WHERE type, je crainds qu’il interprête ca comme tous les types existants, donc il arrive pas a faire la comparaison

Fin c’est un peu le ressenti que j’ai en lisant cette ligne… apès je me goure peut-etre

Affiche ta requête ici s’il te plaît.

Enfaite je crois pas que le probleme vient de la ligne de code…
J’ai fait une autre requete pour une autre page de mon site… je l’ai testée sous l’onglet SQL de ma db et elle affiche ce que je veux. Mais quand j’ai mis cette ligne dans mon code PHP , rien ne s’affiche non plus

Donc je dois pas intégrer la ligne correctement XD (je débute lol)
Donc si quelqu’un pouvais me filer le code exact a intégrer ce serai cool :slight_smile:
Edité le 15/07/2009 à 20:21

A tout hasard, fait un echo mysql_error() avant et après.

bah je sais vraiment pas comment on intègre ca sans faire des erreur de syntaxe… je répête que je débute
J’ai essayer de rajouter le echo mysql_error() mais ma page ne s’affiche même plus donc…

Avec un “;” à la fin tout de même :slight_smile:

Pour que ça marche d’un côté et pas de l’autre, c’est que ton code a un souci quelque part. mysql_error() nous le dira.

oui mais disons que le requete soit bonne… Quelle est le code à utiliser pour l’inserer dans le PHP, pour quelle fonctionne? Faut-il jsute la mettre dans un <? php ?> ?

Question conne : ton code PHP se résume à quoi aujourd’hui? Juste ce mysql_query?

Si oui -> fr2.php.net…

www.tizag.com… (pile poil le bon exemple)

J’ai testé ce qui est mis dans tes liens, jai ceci :

<?php
mysql_connect("localhost", "blabla", "blabla");
mysql_select_db("blabla") or die(mysql_error());

$result = mysql_query("SELECT name FROM collection_item_form WHERE type = 'album' GROUP BY item ORDER BY releasedate DESC")
or die(mysql_error());  

$row = mysql_fetch_array( $result );

echo "item: ".$row['item'];

?>

J’ai utilisé une autre requete pour l’exemple, car celle la fonctionne parfaitement quand je la teste en SQL. Le probleme est que avec le code ci-dessu, j’ai juste “Item :” sur ma page, et rien d’autre (il devrai mafficher une liste d’objets)
Edité le 16/07/2009 à 10:10

Ah ah :slight_smile:

Explications : quand tu fais un select x, y, z…

Tu ne rends disponibles que les champs que tu listes dans le select.

Ils sont ensuite disponibles de deux façons :

  1. soit de manière numérique, dans l’ordre de déclaration ($row[0], etc)
  2. soit de manière associative, ie: $row[‘name’] - le nom dépendant soit des alias, soit des noms de colonne.

Ex:

$result = mysql_query("SELECT name, 1 as Avec_Un_Alias FROM collection_item_form WHERE type = 'album' GROUP BY item ORDER BY releasedate DESC")
or die(mysql_error()); 

while (false !== ($row = mysql_fetch_array( $result ))) {
  print_r($row);
}

Forcément, tu auras toujours un résultat si tu lances la requêtes dans mySQL Query Browser ou phpmyadmin, mais c’est parce qu’il interprète les méta données de ta requête