Kezdőoldal » Számítástechnika » Weblapkészítés » Hogyan tudom megoldani ezt az...

Hogyan tudom megoldani ezt az SQL JOIN problémát?

Figyelt kérdés

Az a lényeg, hogy vannak fent áruk egy táblában, és az ahhoz tartozó képek egy másik táblában. A képek connect_id-ja megegyezik a megfelelő áru id-jával. Nyilván utóbbi auto incrementes integer érték.


Az a lényeg, hogy amikor listába kiírom az adatokat egy while ciklussal, úgy kéne joinolnom, hogy a termék adatai csak egyszer íródjanak ki, utána közben a többi iterációval pedig az összes kép.

Tehát mondjuk ár, méret, leírás egyszer, aztán nyolc kép

aztán

ár méret leírás, aztán hét kép (nyilván amennyi tartozik a termékhez.)


Eddig erre jutottam:


"SELECT DISTINCT images.link AS imagelink, properties.* FROM properties INNER JOIN images ON images.connect_id = properties.id"


Lefut maga a kód, de így annyiszor írja ki az egyedi termékekhez tartozó adatot, ahány darab kép tartozik a termékhez, tehát a DISTINCT nem segít a dolgon.


A link a kép, megvan az oka, hogy nem image vagy picture lett a neve, de ez tökmindegy.


Valami tipp?



2017. okt. 8. 23:53
1 2
 11/20 anonim ***** válasza:

INNER JOIN egy külön legyen...

SELECT

images.link AS imagelink,

properties.*

FROM properties

INNER JOIN

(SELECT link, connect_id FROM images LIMIT 1 ) AS images

ON images.connect_id = properties.id ;



Vagy GROUP BY...

SELECT

images.link AS imagelink,

properties.*

FROM properties

INNER JOIN images

ON images.connect_id = properties.id

GROUP BY properties.id ;


Annyi hogy ha INNER akkor csak akkor ír ki terméket ha van hozzá kép.

Ha vannak olyan termékek ahol nincsenek képek, ott inkább LEFT JOIN kell.

2017. okt. 9. 07:43
Hasznos számodra ez a válasz?
 12/20 anonim ***** válasza:
0%

Sírok.

Az megvan, hogy a group by mire való, és hogy ezek a kódok le se futnak?

2017. okt. 9. 08:06
Hasznos számodra ez a válasz?
 13/20 anonim ***** válasza:

#12 Miért is!?

[link]

2017. okt. 9. 12:22
Hasznos számodra ez a válasz?
 14/20 anonim ***** válasza:
5%

Ja, hogy a MySQL ilyen idiótán működik. :D :D :D

Normális adatbáziskezelőben az ilyen nem megengedett (MySQL-ben is kikapcsolható).

[link]


Egyébként ez nem oldja meg semmilyen formában a kérdező problémáját, mert ezzel csak elrejted a képeket, úgyhogy újabb EPIC FAIL a részedről.


Még mindig csak azt tudom írni, amit már többször írtam én is, meg más is.

Vagy külön kérdezd le a képeket, vagy ne agyatlanul "pakold a listába" a lekérdezés eredményét.

2017. okt. 9. 12:36
Hasznos számodra ez a válasz?
 15/20 anonim ***** válasza:
0%

Egyébként itt legtöbbször azt érzem mintha óvodásokkal vitatkoznék.

Idejöttök valami baromsággal, aminek semmi köze a problémához (mint itt a GROUP BY), aztán kardoskodtok, de márpedig az igenis jó.

Ja, MySQL-ben igen, csak abszolút nem segít senkin.

Tehát kb tényleg megeheted a saját fikádat, csak attól még nem laksz jól.

2017. okt. 9. 12:38
Hasznos számodra ez a válasz?
 16/20 sharkxxx ***** válasza:

CREATE TEMPORARY TABLE `tempimages` (

  `connect_id` char(10) NOT NULL,

  `link0` varchar(255) NULL,

  `link1` varchar(255) NULL,

  `link2` varchar(255) NULL,

  `link3` varchar(255) NULL,

  `link4` varchar(255) NULL,

  `link5` varchar(255) NULL,

  `link6` varchar(255) NULL,

  `link7` varchar(255) NULL,

  PRIMARY KEY (`connect_id`)

);


INSERT INTO `tempimages` (`connect_id`)

  SELECT `images`.`connect_id`

  FROM `images`

  GROUP BY `images`.`connect_id`

;


UPDATE `tempimages`

SET

`link0` = (

  SELECT `link`

  FROM `images`

  WHERE (`images`.`connect_id` = `tempimages`.`connect_id`)

  LIMIT 0, 1

),

`link1` = (

  SELECT `link`

  FROM `images`

  WHERE (`images`.`connect_id` = `tempimages`.`connect_id`)

  LIMIT 1, 1

),

`link2` = (

  SELECT `link`

  FROM `images`

  WHERE (`images`.`connect_id` = `tempimages`.`connect_id`)

  LIMIT 2, 1

),

`link3` = (

  SELECT `link`

  FROM `images`

  WHERE (`images`.`connect_id` = `tempimages`.`connect_id`)

  LIMIT 3, 1

),

`link4` = (

  SELECT `link`

  FROM `images`

  WHERE (`images`.`connect_id` = `tempimages`.`connect_id`)

  LIMIT 4, 1

),

`link5` = (

  SELECT `link`

  FROM `images`

  WHERE (`images`.`connect_id` = `tempimages`.`connect_id`)

  LIMIT 5, 1

),

`link6` = (

  SELECT `link`

  FROM `images`

  WHERE (`images`.`connect_id` = `tempimages`.`connect_id`)

  LIMIT 6, 1

),

`link7` = (

  SELECT `link`

  FROM `images`

  WHERE (`images`.`connect_id` = `tempimages`.`connect_id`)

  LIMIT 7, 1

);


SELECT `properties`.*, `tempimages`.*

FROM `properties`

INNER JOIN `tempimages` ON `tempimages`.`connect_id` = `properties`.`id`

;

2017. okt. 9. 14:39
Hasznos számodra ez a válasz?
 17/20 anonim ***** válasza:

Ez itt weblapkészítés kategória, ahol az esetek 90% -ban PHP - MySQL -t használnak.

Ahol a GROUP BY bár nem szép de célravezető.

2017. okt. 9. 15:30
Hasznos számodra ez a válasz?
 18/20 anonim ***** válasza:
0%

"Ez itt weblapkészítés kategória, ahol az esetek 90% -ban PHP - MySQL -t használnak."

Azért ez elég nagy bullshit. Inkább csak azt mutatja, hogy elég alacsony a színvonal.


"Ahol a GROUP BY bár nem szép de célravezető."

Még egyszer kérdezem, hogyan segít azon, hogy az adatokat csak egyszer, de az összes képet kiírja a GROUP BY, ami elrejti a többi képet.

Aki erre nem tud válaszolni, de a GROUP BY-t javasolja, az legyen kedves tarkón b#szni magát.

2017. okt. 9. 15:44
Hasznos számodra ez a válasz?
 19/20 anonim ***** válasza:

Ezt így nem fogod tudni megcsinálni. Ha szükséged van 1 lekéréssel az összes képre és a hozzátartozó leírásra, ahol egy leíráshoz több kép is tartozik, akkor úgy csinálod, ahogy elkezdted. Lekéred az összekötött táblát:


termék1 - kép1

termék1 - kép2

termék1 - kép3

termék2 - kép4

termék2 - kép5

termék3 - kép6


Valóban, a termék többször szerepel, de azzal nem adatbázis oldalon kell stresszelned, hanem a szerver oldali nyelvvel, mikor végig iterálsz a rekordokon, eldöntöd, hogy most új, vagy régi termékhez tartoznak-e az adatok. Ez egy egyszerű feltétel vizsgálat egy változóval, például az utolsó termék id-t vizsgálod mindig. Ha észlelted, hogy új termék következik, akkor foglalkozol vele, egyébként csak a képpel, és így elérheted ezt a kiírási formát:


termék1

kép1

kép2

kép3

termék2

kép4

kép5

termék3

kép6

2017. okt. 11. 19:35
Hasznos számodra ez a válasz?
 20/20 anonim ***** válasza:
9%
Fölösleges leírni neki, ha 18 kommentből sem értette meg, akkor még 18-ból se fogja.
2017. okt. 11. 20:02
Hasznos számodra ez a válasz?
1 2

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!