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

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

Eli-Hai 19-05-06 21:55

שליפת מידע מתוך MySQL - תלות בין השיאלתות.
 
אהלן, יש לי בתוך מסד הנתונים של הMySQL שני טבלאות שאני מעוניין להשתמש בהם - articles ו categories.
אני שולף את שמות כל הקטגוריות ממסד הנתונים בצורה הבאה -
קוד:

$db->query("SELECT * FROM `categories` ORDER BY category ASC");
אני צריך לשלוף את השם של הקטגוריה ואת הid שלה, בשביל לבצע את השיאלתה הבאה -
קוד:

$db->query("SELECT * FROM `articles` WHERE `id` = {$row['id']}");
אבל עצם, כשאני משלב אותם בתוך while, את שניהם, כל אחד while, הוא לא מדפיס דבר. מה עליי לעשות? הפלט שלי אמור להיראות כך -
Cat 1
Article 1

Cat 2
Article 2
Article 3

Cat 3
Article 4
Article 5

אשמח לעזרה, תודה מראש, אליחי.

Rom 19-05-06 22:14

קוד:

$db->query("SELECT * FROM `articles` WHERE `id` = $row['id']");
תנסה את זה

eXtaZa 19-05-06 22:26

ציטוט:

נכתב במקור על ידי DragonRom
קוד:

$db->query("SELECT * FROM `articles` WHERE `id` = $row['id']");
תנסה את זה

מה ההבדל בין מה שעשית פה למה שהוא עשה? 8-*

MasterNir 19-05-06 22:30

חחח שמה שהוא עשה יתן לך שגיאה ולא ירוץ (:

קודם כל, בטבלה categories יש שדה בשם category?

eXtaZa 19-05-06 22:33

$db->query("SELECT * FROM `categories` ORDER BY category ASC");

Alter 20-05-06 00:32

מבחינת מבנה:
categories מכיל את השדות id,category
articles מכיל את השדות id,cid,title (יש עוד שדות, אבל הם לא רלוונטיות כרגע)

בעיקרון, יש לנו מערכת מאמרים שעובדת על פי קטגוריות.
אנחנו רוצים להציג את כל הקטגוריות ותחת הקטגוריות את המאמרים של אותה הקטגוריה.

השאלה היא, כיצד?
סינון של where cid = {$row['id']}
כבר יש לנו .

תודה מראש |winky|
ואליחי דבר איתי, יש עידכונים במערכת עצמה, שיפצתי הודעות שגיאה ואת מספר התגובות |שריף|


--edit--
אחרי שעה כמעט, אני שמח להגיד שהצלחתי!
אליחי זה עובד!!
אבל יש בעיה =]
אנחנו עובדים עם פונקציות להתחברות לבסיס נתונים.
בשביל לעשות שזה יעבוד הייתי צריך לעשות התחברות לבסיס נתונים פעמיים
בפעם הראשונה:
PHP קוד:

$db->connect('localhost''user''pass''user'); 

שככה זה עובד לנו מצויין בכל הדפים
ובפעם השניה:
PHP קוד:

$db1->connect('localhost''user''pass''user'); 

כמובן לפני זה יש גם
PHP קוד:

$db = new database;
$db1 = new database

יש רעיון איך לחסוך בהתחברויות בלתי רצויות ויעילות לבסיס נתונים?

MasterNir 20-05-06 01:21

תוכלו להוסיף כאן את הקטע הקוד הרלוונטי?

בנוסף, אם יש שגיאת PHP תוסיפו גם אותה.

Alter 20-05-06 01:37

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

<?php 
ob_start
();
/** 
*
* @package ------
* @version $id: index.php, v.0.1.8 20/05/2006 00:47:40
* @copyright (c) 2006 Ron Alter and EliHai Sasi
*
*/

/*
* Index page
*/

// define the core path
define('CORE''./core/');

// require database class and connect
require_once CORE "classes/database.php";
$db = new database;
$db1 = new database;
// connect to mysql with class and config
//require_once . "./conf_global.php";
$db->connect('localhost''user''pass''user');  
$db1->connect('localhost''user''pass''user');  
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <script type="text/javascript" src="script.js"></script>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1255">
    <link rel="stylesheet" type="text/css" href="css/global.css">
</head>
<body>
<?php

if($_GET['act'] == "view") {
    
$db->query("SELECT * FROM categories ORDER BY id aSC");
    while (
$categorie $db->fetch_array())    {
        
$rows $db->num_rows();
        if(!empty(
$rows)) { 
?>
    <table border="0" width="85%" class="table">
        <tr>
            <td class="td1"><div align="center" class="text_title"><? echo  $categorie['category'?> - id <? echo  $categorie['id'?></div></td>
        </tr>
<?

            $db1
->query("SELECT * FROM articles WHERE cid = " $categorie['id'] . " ORDER BY title ASC");
            while(
$x $db1->fetch_array()) {
                echo 
"        <tr>
            <td class='text'><a href='articles.php?id=" 
$x['id'] . "&amp;cid=" $x['cid'] . "' class='text'>" $x['title'] . "</a></td>
        </tr>
"
;
}
?>
    </table>
<?
        
}
    elseif(empty(
$rows))    { 
        echo (
"  "); 
    }
}
}
?>


<?php ob_end_flush(); ?>

אני זז לישון, בבוקר אני חוזר, תודה על העזרה.

BlueNosE 20-05-06 07:50

אממ
אתה לא חייב להתחבר פעמיים כדי להוציא שאילתות מ2 טבלאות שנמצאות באותו מסד, רון.
מספיק חיבור אחד ל29628376 שאילתות על אותו מסד.
PHP קוד:

$db -> query ("SELECT * FROM bla");
$db -> query ("INSERT INTO bla (1, 2, 3) VALUES ('bla', 'bli', blop')"); 


Alter 20-05-06 10:17

ציטוט:

נכתב במקור על ידי BlueNosE
אממ
אתה לא חייב להתחבר פעמיים כדי להוציא שאילתות מ2 טבלאות שנמצאות באותו מסד, רון.
מספיק חיבור אחד ל29628376 שאילתות על אותו מסד.
PHP קוד:

$db -> query ("SELECT * FROM bla");
$db -> query ("INSERT INTO bla (1, 2, 3) VALUES ('bla', 'bli', blop')"); 


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

תודה על הנסיון לעזור, רון.


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

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