PHP y MySQL, matriz asociada con 2 claves

Tengo este escenario.

Ingresé $groupid="1";

mesa principal

----------------------
| groupid  |  postid  |
|---------------------|
|       1  |       1  |
|       2  |       2  |
|       1  |       3  |

$query = "SELECT postid FROM `mainl` WHERE groupid='$groupid'";
$result = mysql_query($query);

// a group of postids belonging to that groupid which should hold [1, 3] for groupid=1
while($row = mysql_fetch_array($result)) {
    $postids[] = $row["postid"];
}

segunda mesa

-------------------------------------------
|  postid  |  commentid  |     comment    |
-------------------------------------------
|       1  |          1  |   testing 1    |
|       1  |          2  |   testing 2    |
|       1  |          3  |       what?    |
|       2  |          1  |       hello    |
|       2  |          2  | hello world    |
|       3  |          1  |      test 3    |
|       3  |          2  |       begin    |
|       3  |          3  |        why?    |
|       3  |          4  |       shows    |


$query = "SELECT * FROM `second`";
$result = mysql_query($query);

while ($row = mysql_fetch_array($result)) {
    if (in_array($row["postid"], $postids)) {
        $comments[$row["postid"]] = $row["comment"];

Pero como debo cuidarlo comentado
Quiero que la matriz postid sea [1,3] y mi matriz de comentarios para ser [commentid: comment] [1:testing1, 2: testing2, 3: what?] para postid=1
y
[1:test3, 2:begin, 3: why? 4:shows] para postid=3

¿Cómo se debe organizar todo lo que dicho comentario está asociado con commentid y postid?

preguntado el 12 de junio de 12 a las 21:06

Las funciones de mysql_* no deben usarse más, php tiene una versión más nueva, más rápida y más segura para acceder a las bases de datos de mysql. Deben usarse las funciones mysqli_*. Puede encontrar más información y sintaxis aquí. php.net/manual/en/mysqli.query.php -

¿Qué debería usar? Intenté encontrar información al respecto en el manual de php pero no pude encontrar nada.

Solicitó dos cosas diferentes, a) una matriz personalizada de cada tabla yb) una matriz más simple derivada de la consulta SQL mediante la unión. ¿Cuál preferirías? -

2 Respuestas

Primero seguiría la sugerencia de rokdd y haría 1 consulta

SELECT  m.groupid , s.postid, s.commentid, s.comment FROM `main1` m JOIN `second` s USING (postid) where m.groupid = 1

Entonces haría una matriz multidimensional

while ($row = mysql_fetch_array($result))
    $groups[$row['groupid'][$row['postid']][$row['commentid']=$row['comment'];

luego para iterar a través de la matriz

foreach($groups as $group)    
    foreach($group as $post)
        foreach($post as $comment)
           echo $comment;

Esto también hará un seguimiento de los grupos (si alguna vez desea seleccionar por más de 1 grupo). Si no le importan los grupos, simplemente deje la primera parte de la matriz.

while ($row = mysql_fetch_array($result))
    $posts[$row['postid']][$row['commentid']=$row['comment'];


    foreach($posts as $post)
        foreach($post as $comment)
           echo $comment;

Respondido el 13 de junio de 12 a las 03:06

bueno @php lado no estaba seguro de lo que le gusta hacer. antes de iterar muchas veces, también puede crear una clave con un separador y tener una matriz: $comments[$row['groupid'].'-'.$row['postid'].'-'.$row['commentid']]=$row['comment']; - Rokdd

Supongo que usaré la unión en sql para que tengas una declaración:

SELECT * FROM second as second_tab LEFT join main as main_table ON main_table.post_id=second_table.post_id WHERE main_table.group_id="3"

Bueno, no probado ahora, ¡pero esa es una manera de resolver algunos de sus problemas!

Respondido el 12 de junio de 12 a las 21:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.