εμφάνιση δεδομένων php mysql

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
wandor
Δημοσιεύσεις: 16
Εγγραφή: 29 Μαρ 2008 14:10

εμφάνιση δεδομένων php mysql

Δημοσίευση από wandor » 23 Οκτ 2008 16:53

έχουμε 2 πίνακες erga_table & photo

και θέλουμε να εμφανίσουμε τις εγγραφές

Ο πίνακας erga_table έχει όλα τα έργα
Ο πίνακας photo έχει όλες τις φωτ. και συνδέεται με erga_id column

ΤΟ ΠΡΟΒΛΗΜΑ
(π.χ. το έργο 1 έχει 2 φωτ. το εργο 2 έχει 1 φωτ.)

ΜΟΥ ΕΜΦΑΝΊΖΕΙ ΞΑΝΑ ΤΗΝ ΠΕΡΙΓΡΑΦΗ ΤΟΥ ΕΡΓΟΥ + ΔΕΥΤΕΡΗ ΦΩΤ. ΔΕΙΤΕ CODE

Κώδικας: Επιλογή όλων

<?php
//Σύνδεση στην βάση
require_once &#40;'mysql/mysql_connect.php'&#41;;

$query = mysql_query&#40;"SELECT * FROM erga_table"&#41;;
	
$result = mysql_result&#40;$query,0&#41;;
	
if&#40;$result != 1&#41;&#123;
echo'<p>Λάθος erotima';

	&#125;else&#123;
		
$query = "SELECT * FROM erga_table, photo WHERE erga_table.erga_id = photo.erga_id";
if &#40;$result = mysql_query &#40;$query&#41;&#41; &#123;
	while &#40;$row = mysql_fetch_array &#40;$result&#41;&#41; &#123;
		// ΑΡΧΗ από τον πίνακα	***** erga_table *****
		$erga_id = $row&#91;'erga_id'&#93;;
		$erga_name = $row&#91;'erga_name'&#93;;
		$erga_perigrafi = $row&#91;'erga_perigrafi'&#93;;

		$photo_mikri = $row&#91;'photo_mikri'&#93;;
		$photo_megali = $row&#91;'photo_megali'&#93;;
?>

<table width="100%" border="1" bordercolor="#666666" cellpadding="0" cellspacing="0">
<tr>
<td width="100%" align="center"><a target='_new' href="../admin/uploads/<?php echo $photo_megali ?>"><img border='0' src="../admin/uploads/<?php echo $photo_mikri ?>" width='50' height='50'></a></td>
</tr>
</table>

<table width="100%" border="1" bordercolor="#666666" cellpadding="2" cellspacing="2">
<tr>
<td width="30%">erga_id</td>
<td width="70%"><?php echo $erga_id; ?></td>
</tr>
<tr>
<td width="30%">ΕΡΓΟ</td>
<td width="70%"><?php echo $erga_name; ?></td>
</tr>
<tr>
<td width="30%">ΠΕΡΙΓΡΑΦΗ ΕΡΓΟΥ</td>
<td width="70%"><?php echo $erga_perigrafi; ?></td>
</tr>
</table>

<br><br>

<?php
			&#125;
			
		&#125;else&#123;
			echo'<p>lathos';
		&#125;
	&#125;
?>
ΤΟ ΠΡΟΒΛΗΜΑ ΕΙΝΑΙ ΕΔΩ ΜΑΛΟΝ

while ($row = mysql_fetch_array ($result)) {

ΑΛΛΑ ΠΩΣ, PLEASE HELP

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

εμφάνιση δεδομένων php mysql

Δημοσίευση από korgr » 23 Οκτ 2008 19:52

Στο query χρησιμοποίησε το keyword "DISTINCT" που αφαιρεί τα duplicate records
SELECT DISTINCT ....

wandor
Δημοσιεύσεις: 16
Εγγραφή: 29 Μαρ 2008 14:10

εμφάνιση δεδομένων php mysql

Δημοσίευση από wandor » 23 Οκτ 2008 19:59

με το SELECT DISTINCT εμφανίζει

π.χ.

το 1ο εργο + 1 φωτ.(η πρώτη φωτ.)
το 2ο εργο + 1 φωτ.(μοναδική φωτ.)
το 3ο εργο + 1 φωτ.(μοναδική φωτ.)

και ξανα το 1ο εργο + με δευτερή φωτ.

κατι άλλο φταιει ΤΙ ? :oops:

wandor
Δημοσιεύσεις: 16
Εγγραφή: 29 Μαρ 2008 14:10

εμφάνιση δεδομένων php mysql

Δημοσίευση από wandor » 29 Οκτ 2008 23:12

pedia helppppppppppppppp den vrisko akri

opios borei as dosi mia lisi

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

εμφάνιση δεδομένων php mysql

Δημοσίευση από Apostolis_38 » 30 Οκτ 2008 12:13

Η μόνη λύση είναι το distinct που σου είπε ο korgr.
Το distinct όμως δουλεύει λίγο περίεργα.

Παράδειγμα το
select distinct(erga_table.erga_id),* from ... where...
και το
select distinct(erga_table.erga_id),erga.erga_name,photo.erga_id,photo.photo_mikri from... where...
θα σου φέρουν διαφορετικά αποτελέσματα.
Πρέπει να πειραματιστής λίγο, αλλά σε γενικές γραμμές πρέπει να πάρεις σαν distinct το row που σου εμφανίζει τις πολλαπλές εγγραφές.
Αν θέλεις βάλε το query με το distinct.

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

εμφάνιση δεδομένων php mysql

Δημοσίευση από korgr » 30 Οκτ 2008 15:21

Αλλιώς κάντο με την μέθοδο του ...μπακάλη :lol:

Κώδικας: Επιλογή όλων

$query = "SELECT * FROM erga_table WHERE 1";
if &#40;$result = mysql_query &#40;$query&#41;&#41; &#123;
   while &#40;$row = mysql_fetch_array &#40;$result&#41;&#41; &#123;
$id = $row&#91;erga_id&#93;;

// παρουσίαση πεδίων του έργου...

$pic_query = "SELECT * FROM photo WHERE erga_id = '$id'";
if &#40;$pic_result = mysql_query &#40;$pic_query&#41;&#41; &#123;
while &#40;$pic_row = mysql_fetch_array &#40;$pic_result&#41;&#41; &#123; // θα λουπάρει για όσες φωτό έχει το έργο id=$id

// παρουσίαση των φωτό του έργου...

&#125; // end loop photo
&#125; // end if $pic_result
&#125; // end loop erga
&#125; // end if $result

wandor
Δημοσιεύσεις: 16
Εγγραφή: 29 Μαρ 2008 14:10

εμφάνιση δεδομένων php mysql

Δημοσίευση από wandor » 31 Οκτ 2008 16:39

:D ευχαριστώ, korgr & apostoli, προσπαθώ με την SELECT DISTINCT απλος αυτο που καταφερα είναι να εμφανίσω τις 4 εγγραφές που έχουν στοιχεία.

έχω μπρεδευτει σε αυτο το σημείο δίνοντας την query:

Κώδικας: Επιλογή όλων

$query = "SELECT DISTINCT erga_table.erga_id, erga_table.erga_name, erga_table.erga_perigrafi FROM erga_table, photo WHERE photo.erga_id = erga_table.erga_id";
μου εμφανίζει τις 4 εγγραφές που έχουν στοιχεία

με το query:

Κώδικας: Επιλογή όλων

$query = "SELECT DISTINCT erga_table.erga_id, erga_table.erga_name, erga_table.erga_perigrafi photo.photo_mikri FROM erga_table, photo WHERE photo.erga_id = erga_table.erga_id";
μου εμφανίζει τις 5 εγγραφές που έχουν στοιχεία + φωτογραφίες τους
ΑΥΤΟ ΘΕΛΩ ΧΩΡΙΣ, ομως ξανα την (id εργου, περιγραφή)

erga_table.erga_id, erga_table.erga_name, erga_table.erga_perigrafi

ΜΟΝΟ ΤΗΝ ΦΩΤ. 2 του εργου 1, ΔΙΠΛΑ ΣΤΗΝ ΠΡΩΤΗ ΦΩΤ.

ΣΑΣ ΣΤΕΛΝΩ D.B. + PAGE CODE (το έχω συμαζεψει λιγο)

Κώδικας: Επιλογή όλων

CREATE TABLE `erga_table` &#40;
  `erga_id` int&#40;10&#41; NOT NULL auto_increment,
  `erga_name` varchar&#40;255&#41; NOT NULL,
  `erga_perigrafi` varchar&#40;255&#41; NOT NULL,
   PRIMARY KEY  &#40;`erga_id`&#41;
&#41; ENGINE=InnoDB DEFAULT CHARSET=greek AUTO_INCREMENT=7 ;

INSERT INTO `erga_table` &#40;`erga_id`, `erga_name`, `erga_perigrafi`&#41; VALUES 
&#40;1, 'ergo1', 'ergo1 perig'&#41;,
&#40;2, 'ergo2', 'ergo2 perig'&#41;,
&#40;3, 'ergo3', 'ergo3 perig'&#41;,
&#40;4, 'ergo4', 'ergo4 perig'&#41;,
&#40;5, 'ergo5', 'ergo5 perig'&#41;,
&#40;5, 'ergo2', 'ergo5 perig'&#41;;

CREATE TABLE `photo` &#40;
  `photo_id` int&#40;10&#41; NOT NULL auto_increment,
  `photo_mikri` varchar&#40;50&#41; NOT NULL,
  `photo_megali` varchar&#40;50&#41; NOT NULL,
  `erga_id` int&#40;10&#41; NOT NULL,
  PRIMARY KEY  &#40;`photo_id`&#41;
&#41; ENGINE=InnoDB DEFAULT CHARSET=greek AUTO_INCREMENT=6 ;

INSERT INTO `photo` &#40;`photo_id`, `photo_mikri`, `photo_megali`, `erga_id`&#41; VALUES 
&#40;1, 'akinito-01a.jpg', 'akinito-01.jpg', 1&#41;,
&#40;2, 'akinito-02a.jpg', 'akinito-02.jpg', 2&#41;,
&#40;3, 'akinito-03a.jpg', 'akinito-03.jpg', 3&#41;,
&#40;4, 'akinito-01a.jpg', 'akinito-01.jpg', 4&#41;,
&#40;5, 'akinito-01a-test.jpg', 'akinito-01-test.jpg', 1&#41;;

Κώδικας: Επιλογή όλων

<?php
//Σύνδεση στην βάση
require_once &#40;'mysql/mysql_connect.php'&#41;;

$query = "SELECT DISTINCT erga_table.erga_id, erga_table.erga_name, erga_table.erga_perigrafi, photo.photo_mikri FROM erga_table, photo WHERE photo.erga_id = erga_table.erga_id";
if &#40;$result = mysql_query &#40;$query&#41;&#41; &#123;

	while &#40;$row = mysql_fetch_array &#40;$result&#41;&#41; &#123;
// ΑΡΧΗ από τον πίνακα	***** erga_table *****
		$erga_id = $row&#91;'erga_id'&#93;;
		$erga_name = $row&#91;'erga_name'&#93;;
		$erga_perigrafi = $row&#91;'erga_perigrafi'&#93;;
// ΑΡΧΗ από τον πίνακα	***** photo *****
		$photo_mikri = $row&#91;'photo_mikri'&#93;;

echo"<table width='100%' border='1' cellpadding='0' cellspacing='0'>";
echo"<tr>";
echo"<td>$photo_mikri</td>";
echo"</tr>";
echo"</table>";

echo"<table width='100%' border='1' cellpadding='0' cellspacing='0'>";
echo"<tr>";
echo"<td>$erga_id</td>";
echo"</tr>";
echo"<tr>";
echo"<td>$erga_name</td>";
echo"</tr>";
echo"<tr>";
echo"<td>$erga_perigrafi</td>";
echo"</tr>";
echo"</table><br><br>";


&#125;
&#125;else&#123;
	echo"la8os erotima";
&#125;
?>
[/code]

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

εμφάνιση δεδομένων php mysql

Δημοσίευση από Apostolis_38 » 31 Οκτ 2008 17:46

select distinct(erga_table.erga_perigrafi),erga_table.erga_id, erga_table.erga_name,photo κ.λ.π κ.λ.π κ.λπ.

ή

select distinct(photo.photo_mikri),erga_table.erga_id, erga_table.erga_name,photo κ.λ.π κ.λ.π κ.λπ.


Για δοκιμασε :D

wandor
Δημοσιεύσεις: 16
Εγγραφή: 29 Μαρ 2008 14:10

εμφάνιση δεδομένων php mysql

Δημοσίευση από wandor » 31 Οκτ 2008 17:57

ολοκληρο το ερώτημα θα είναι

Κώδικας: Επιλογή όλων

$query = "select distinct&#40;photo.photo_mikri&#41;,erga_table.erga_id, erga_table.erga_name,photo.* FROM erga_table, photo WHERE photo.erga_id = erga_table.erga_id";
αυτο ενοεις apostoli.

αυτο μου δίνει ξανα την περιγραφή του εργου 1 + φωτ. 2,

αυτο που θελω ειναι: ΜΟΝΟ ΤΗΝ ΦΩΤ. 2 του εργου 1, ΔΙΠΛΑ ΣΤΗΝ ΠΡΩΤΗ ΦΩΤ.

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

εμφάνιση δεδομένων php mysql

Δημοσίευση από Apostolis_38 » 31 Οκτ 2008 18:17

Γιατί
select distinct(photo.photo_mikri)
και μετά
photo.* ;

Αν θέλεις να συμπεριλάβεις κι άλλα πεδία απο τον photo βάλτα ένα - ένα
ΧΩΡΙΣ να ξαναδιαλέγεις το photo.photo_mikri
Και χωρίς δεύτερο distinct. Μου κάνει εντύπωση που δεν σου χτύπησε error την πρώτη φορά με πάνω απο 1 distinct.

Πάντως κατά τη γνώμη μου καλύτερα να δοκιμάσεις τον πρώτο τρόπο
select distinct(erga_table.erga_perigrafi),erga_table.erga_id, erga_table.erga_name,photo κ.λ.π κ.λ.π κ.λπ.
επειδή σου κάνει distinct στίς εγγραφές που εμφανίζονται πολλές φορές.

wandor
Δημοσιεύσεις: 16
Εγγραφή: 29 Μαρ 2008 14:10

εμφάνιση δεδομένων php mysql

Δημοσίευση από wandor » 31 Οκτ 2008 18:30

συγνώμη apostoli αλλα θα μπορούσες να το γράψεις ολόκληρω το query χωρις κλπκλπλ

Πάντως κατά τη γνώμη μου καλύτερα να δοκιμάσεις τον πρώτο τρόπο
select distinct(erga_table.erga_perigrafi),erga_table.erga_id, erga_table.erga_name,photo κ.λ.π κ.λ.π κ.λπ.
επειδή σου κάνει distinct στίς εγγραφές που εμφανίζονται πολλές φορές.

ευχαριστώ εκ'το προτέρων

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

εμφάνιση δεδομένων php mysql

Δημοσίευση από Apostolis_38 » 31 Οκτ 2008 18:54

select distinct(erga_table.erga_perigrafi),erga_table.erga_id, erga_table.erga_name,photo.photo_mikri,photo.erga_id,photo.photo_megali
from erga_table,photo
where erga_table.erga_id = photo.erga_id


Επίσης απέφευγε να δίνεις τα ίδια ονόματα σε στήλες διαφορετικών πινάκων (erga_table.erga_id και photo.erga_id)
Ξέρω οτι ακούγεται κουφό αλλά κι εμένα μου είχε προξενήσει προβλήματα σε παλιότερη έκδοση της mysql (νομίζω 3.2 ή κάποια παρεμφερή).

wandor
Δημοσιεύσεις: 16
Εγγραφή: 29 Μαρ 2008 14:10

εμφάνιση δεδομένων php mysql

Δημοσίευση από wandor » 31 Οκτ 2008 19:05

apostoli, δεν δουλέυει οπώς θα ήθελα.

προσεξε λίγο αυτό

αυτο που θελω ειναι: ΜΟΝΟ ΤΗΝ ΦΩΤ. 2 του εργου 1, ΔΙΠΛΑ ΣΤΗΝ ΠΡΩΤΗ ΦΩΤ. του εργου 1

και ΟΧΙ ξανα to ονομα, την περιγραφή του έργου 1 και την φωτ. 2 του εργου 1

δες και του πινακες της mysql

Άβαταρ μέλους
dimsis
Reporter
Δημοσιεύσεις: 7994
Εγγραφή: 25 Ιούλ 2001 03:00

εμφάνιση δεδομένων php mysql

Δημοσίευση από dimsis » 01 Νοέμ 2008 10:13

Αν υποστηρίζει subselect η MySQL μπορείς να κάνεις distinct βάση του erga_id στον πίνακα photo, και με subselect να τραβήξεις το erga_table.erga_perigrafi από τον erga_table

Δηλαδή κάτι σαν:
SELECT DISTINCT (photo.erga_id), photo.photo_mikri,photo.photo_megali, (SELECT erga_table.erga_perigrafi FROM erga WHERE photo.erga_id=erga .erga_id) as erga_perigrafi
FROM photos

οπότε έχεις μια φωτογραφία για κάθε έργο (αφού είναι distinct βάση του id του έργου) και σου έχει γυρίσει και την περιγραφή με το sub select.

Αν δεν υποστηρίζει sub select δοκίμασε μήπως μπορεί να παίξει και με top 1 από τον photos, ώστε να γυρίζει μόνο μια εγγραφή στο join.
SELECT erga_table.erga_perigrafi, top 1 photo.photo_mikri
FROM erga, photos
WHERE photo.erga_id=erga.erga_id

Αν δεν πιάνει τίποτε πας στη χειρότερη περίπτωση όπου όσο εμφανίζεις τα αποτελέσματα του erga τραβάς και ένα query για να τραβήξει την top1 photo και την εμφανίζεις.

Apostolis_38
Δημοσιεύσεις: 1969
Εγγραφή: 14 Φεβ 2008 16:20
Τοποθεσία: ΠΕΙΡΑΙΑΣ

εμφάνιση δεδομένων php mysql

Δημοσίευση από Apostolis_38 » 03 Νοέμ 2008 12:10

wandor έγραψε: αυτο που θελω ειναι: ΜΟΝΟ ΤΗΝ ΦΩΤ. 2 του εργου 1, ΔΙΠΛΑ ΣΤΗΝ ΠΡΩΤΗ ΦΩΤ. του εργου 1
και ΟΧΙ ξανα to ονομα, την περιγραφή του έργου 1 και την φωτ. 2 του εργου 1
Κοίτα, επειδή δεν έχω την άνεση να φτιάξω μία βάση ακριβώς σαν τη δικιά σου και να το ψάξω υπάρχουν δύο επιλογές

α) Υπάρχει η εντολή EXPLAIN της MySQL που αναλύει πως γίνεται ένα query και τα αποτελέσματά του.
Την οποία όμως δεν χρησιμοποιώ και δεν μπορώ να σου πω περισσότερα. Ψάξτο αν θέλεις.

β) Υπάρχει και o μπακαλίστικος τρόπος, που χρησιμοποιώ κι εγώ και σου ανέφερα πιο πάνω.
Μπές σε MySQL command prompt και δοκίμασε τα πεδία λίγα λίγα (π.χ. SELECT photo.photo_id,photo.photo_mikri,erga_table.erga_id,erga_table.erga_perigrafi) και δες ποιό σου βγάζει πολλαπλές καταχωρήσεις.
Κάνε select distinct αυτό το πεδίο.

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες