mboost-dp1
php mysql billed tabel join
- Forside
- ⟨
- Forum
- ⟨
- Programmering
#2 hvad har du brug for at vide? :)
Har leget lidt med nogen lunde samme sætning. Dog er det eneste problem at den ikke henter alle tilhørende billeder ud til hvert arrangement, kun 1.
EDIT: Hvad går den sidste WHERE i din sætning?
Har leget lidt med nogen lunde samme sætning. Dog er det eneste problem at den ikke henter alle tilhørende billeder ud til hvert arrangement, kun 1.
SELECT e_id, `date`, head, descr, img_filename FROM cms_events
INNER JOIN cms_images
ON cms_events.e_id = cms_images.img_arrid
EDIT: Hvad går den sidste WHERE i din sætning?
soduno (3) skrev:Hvad går den sidste WHERE i din sætning?
Det var for at illustære at der kun skulle hentes "data" fra en event.
soduno (3) skrev:Har leget lidt med nogen lunde samme sætning. Dog er det eneste problem at den ikke henter alle tilhørende billeder ud til hvert arrangement, kun 1.
Er ikke helt sikker på hvad du mener men hvis du har flere billeder til samme event, skal du måske left joine den anden vej. Eller RIGHT JOIN
Altså når jeg snakker om event, mener jeg jo en begivenhed(concert).
Admin har mulighed for at tilføje f.eks 10 billeder til en begivenhed så brugeren kan klikke frem og tilbage(i et billedgalleri tilhørende eventet) og få et indtryk af begivenheden.
Var det uddybelse nok? (ikke ment negativt)
Glemte også at tilføje jeg havde en group by i ovenstående sætning.
Så komplet set, ser det sådan ud:
Admin har mulighed for at tilføje f.eks 10 billeder til en begivenhed så brugeren kan klikke frem og tilbage(i et billedgalleri tilhørende eventet) og få et indtryk af begivenheden.
Var det uddybelse nok? (ikke ment negativt)
Glemte også at tilføje jeg havde en group by i ovenstående sætning.
Så komplet set, ser det sådan ud:
SELECT e_id, `date`, head, descr, img_filename
FROM cms_events
INNER JOIN cms_images ON cms_events.e_id = cms_images.img_arrid
WHERE `date` >='". $timenow ."' GROUP BY head LIMIT 0,9
I MSSQL ville jeg nok skrive det således:
Altså uden INNER JOIN, men bare JOIN, hvilket i MSSQLs tilfælde betyder en FULL OUTER JOIN.
Du burde kunne komme afsted med det med en OUTER JOIN.. Hvis det ikke virker, så skyder jeg skylden på at jeg er stiv..
SELECT evnts.e_id, evnts.date, evnts.head, evnts.descr, img.img_filename
FROM cms_events evnts
JOIN cms_images img
ON evnts.e_id = img.img_arrid
Altså uden INNER JOIN, men bare JOIN, hvilket i MSSQLs tilfælde betyder en FULL OUTER JOIN.
Du burde kunne komme afsted med det med en OUTER JOIN.. Hvis det ikke virker, så skyder jeg skylden på at jeg er stiv..
#6 Hmm... Når jeg prøver at udskrive det du skriver, udskriver den overskrifterne(head) fra tabellen cms_evens ligeså mange gange som der er billeder i tabellen cms_images. Hvordan kan jeg evt. undgå dette?
Edit. Ahh den udskriver jo header for hvert billede(img_filename).
Er det så noget Foreach man skal have fat i for at sortere resultatet?
Edit. Ahh den udskriver jo header for hvert billede(img_filename).
Er det så noget Foreach man skal have fat i for at sortere resultatet?
tazimn (6) skrev:Altså uden INNER JOIN, men bare JOIN, hvilket i MSSQLs tilfælde betyder en FULL OUTER JOIN.
????
http://msdn.microsoft.com/en-us/library/ms177634%2...
INNER
Specifies all matching pairs of rows are returned. Discards unmatched rows from both tables. When no join type is specified, this is the default.
Ok forklaring herunder:
Hvis jeg bruger seneste query bliver mit resultat:
Udstilling 11-07-12
1341493455-_AAA3890.jpg
Udstilling 11-07-12
1341923078-_AAA3909.jpg
Udstilling 11-07-12
1341923079-_AAA3910.jpg
Koncert 12-07-12
1341923162-1338745223.png
Koncert 12-07-12
1341923162-clementine.png
Koncert 12-07-12
Jeg ønsker følgende resultat:
Udstilling, 11-7-12
Billeder i et array
Koncert 12-7-12
Billeder i et array
Tabel oversigt
cms_events:
e_id, head, descr, date
cms_images:
img_id, img_arrid(til e_id), img_filename
Hvis jeg bruger seneste query bliver mit resultat:
Udstilling 11-07-12
1341493455-_AAA3890.jpg
Udstilling 11-07-12
1341923078-_AAA3909.jpg
Udstilling 11-07-12
1341923079-_AAA3910.jpg
Koncert 12-07-12
1341923162-1338745223.png
Koncert 12-07-12
1341923162-clementine.png
Koncert 12-07-12
Jeg ønsker følgende resultat:
Udstilling, 11-7-12
Billeder i et array
Koncert 12-7-12
Billeder i et array
Tabel oversigt
cms_events:
e_id, head, descr, date
cms_images:
img_id, img_arrid(til e_id), img_filename
PoulErik (19) skrev:SELECT e_id, `date`, head, descr, GROUP_CONCAT(img_filename) FROM cms_events
LEFT JOIN cms_images
ON cms_events.e_id = cms_images.img_arrid GROUP BY e_id
Den udskriver "kun" følgende:
Udstilling 11-07-12
1341493455-_AAA3890.jpg
Koncert 12-07-12
1341923162-1338745223.png
CREATE TABLE main (
id INTEGER NOT NULL,
txt VARCHAR(50) NOT NULL,
PRIMARY KEY(id)
);
CREATE TABLE subs (
id INTEGER NOT NULL,
nam VARCHAR(50) NOT NULL,
main_id INTEGER NOT NULL,
PRIMARY KEY(id)
);
INSERT INTO main VALUES(1, 'All A');
INSERT INTO main VALUES(2, 'All B');
INSERT INTO main VALUES(3, 'All C');
INSERT INTO subs VALUES(1, 'A1.jpg', 1);
INSERT INTO subs VALUES(2, 'B1.jpg', 2);
INSERT INTO subs VALUES(3, 'B2.jpg', 2);
INSERT INTO subs VALUES(4, 'B3.jpg', 2);
SELECT main.txt,subs.nam
FROM main JOIN subs ON main.id=subs.main_id
ORDER BY main.txt;
SELECT main.txt,subs.nam
FROM main LEFT JOIN subs ON main.id=subs.main_id
ORDER BY main.txt;
<?php
class Main {
public $txt;
public $subs;
public function __construct($txt) {
$this->txt = $txt;
$this->subs = array();
}
};
class Sub {
public $nam;
public function __construct($nam) {
$this->nam = $nam;
}
};
function load() {
$data = array();
$con = new mysqli('localhost', 'root', '', 'Test');
$stmt = $con->prepare('SELECT main.txt,subs.nam FROM main LEFT JOIN subs ON main.id=subs.main_id ORDER BY main.txt;');
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($maintxt, $subnam);
$ix = 0;
$lastmaintxt = '>>>>BOF<<<<';
while($stmt->fetch()) {
if($maintxt != $lastmaintxt) {
$ix++;
$data[$ix] = new Main($maintxt);
$lastmaintxt = $maintxt;
}
if($subnam != null) $data[$ix]->subs[] = new Sub($subnam);
}
$stmt->close();
$con->close();
return $data;
};
function display_as_lists($data) {
echo "<ul>\r\n";
foreach($data as $main) {
echo "<li>$main->txt</li>\r\n";
echo "<ul>\r\n";
foreach($main->subs as $sub) {
echo "<li>$sub->nam</li>\r\n";
}
echo "</ul>\r\n";
}
echo "</ul>\r\n";
};
function display_as_table($data) {
echo "<table border='1'>\r\n";
echo "<tr><th>Text</th><th>Name</th></tr>\r\n";
foreach($data as $main) {
echo "<tr>\r\n";
$n = count($main->subs);
echo "<td rowspan='$n'>$main->txt</td>\r\n";
for($ix = 0; $ix < $n; $ix++) {
if($ix > 0) echo "</tr>\r\n<tr>\r\n";
$sub = $main->subs[$ix];
echo "<td>$sub->nam</td>\r\n";
}
echo "</tr>\r\n";
}
echo "</table>\r\n";
}
$data = load();
display_as_lists($data);
display_as_table($data);
?>
mysql> SELECT main.txt,subs.nam
-> FROM main JOIN subs ON main.id=subs.main_id
-> ORDER BY main.txt;
+-------+--------+
| txt | nam |
+-------+--------+
| All A | A1.jpg |
| All B | B2.jpg |
| All B | B3.jpg |
| All B | B1.jpg |
+-------+--------+
4 rows in set (0.00 sec)
mysql> SELECT main.txt,subs.nam
-> FROM main LEFT JOIN subs ON main.id=subs.main_id
-> ORDER BY main.txt;
+-------+--------+
| txt | nam |
+-------+--------+
| All A | A1.jpg |
| All B | B2.jpg |
| All B | B3.jpg |
| All B | B1.jpg |
| All C | NULL |
+-------+--------+
5 rows in set (0.00 sec)
mysql> SELECT main.txt,GROUP_CONCAT(subs.nam)
-> FROM main LEFT JOIN subs ON main.id=subs.main_id
-> GROUP BY main.txt
-> ORDER BY main.txt;
+-------+------------------------+
| txt | GROUP_CONCAT(subs.nam) |
+-------+------------------------+
| All A | A1.jpg |
| All B | B2.jpg,B3.jpg,B1.jpg |
| All C | NULL |
+-------+------------------------+
3 rows in set (0.00 sec)
Wov damn arne. Dine php kundskaber rækker sku da til mere end hvad jeg kan tyde. Takker so far. Og ja mindst 500 points til dig ;)
Nu er det ikke fordi jeg vil være nedern eller utaknemlig, men kan eksemplet laves uden oop? Jeg sutter til oop og der er en fejl et eller andet sted (muligvis mig selv der har lavet den) og aner ikke hvor jeg skal starte :P
Nu er det ikke fordi jeg vil være nedern eller utaknemlig, men kan eksemplet laves uden oop? Jeg sutter til oop og der er en fejl et eller andet sted (muligvis mig selv der har lavet den) og aner ikke hvor jeg skal starte :P
arne_v (8) skrev:tazimn (6) skrev:Altså uden INNER JOIN, men bare JOIN, hvilket i MSSQLs tilfælde betyder en FULL OUTER JOIN.
????
http://msdn.microsoft.com/en-us/library/ms177634%2...
INNER
Specifies all matching pairs of rows are returned. Discards unmatched rows from both tables. When no join type is specified, this is the default.
Jævnfør:
tazimn (6) skrev:Hvis det ikke virker, så skyder jeg skylden på at jeg er stiv..
Gå til top
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.