Kezdőoldal » Számítástechnika » Programozás » SQL - Hogyan célszerű lekérdez...

SQL - Hogyan célszerű lekérdezni több táblából, ha az összes adatra szükség van?

Figyelt kérdés

Hogyan lehetne lekérdezni/megjeleníteni a személyeket a barátaikkal úgy, hogy a hozzájuk tartozó összes barát megjelenjen?

Példa a két táblára:

Az első "emberek"; id, név, kor, stb.

A második "baratok"; barat_id, datum, stb.


Inner join-t nem tudom használni, mert lehet, hogy valakinek nincsen barátja/ismerőse.

Én full outer joinnal csinálnám (mysql-ben nincs ilyen, ezért 2 select Left/Right joinnal, majd union), viszont így nehezebb php-ban lekezelni.

Ti hogyan csinálnátok? Akár a lekezelést, akár a lekérdezést?



2018. dec. 19. 14:11
 1/10 anonim ***** válasza:

Nem értem a példa táblákat. A barátok táblában a barat_id mit jelent? Hogy kapcsol ez össze két embert?

Amúgy ez jellemzően left join, de a konkrét megoldás attól függ, mi határozza meg az emberek közti kapcsolatot.

2018. dec. 19. 14:25
Hasznos számodra ez a válasz?
 2/10 A kérdező kommentje:

Köszi a választ. A barát táblát valóban nem gondoltam végig. :D

Abban rontottam, hogy a projektemben egy embernek lehet több barátja, viszont az ő baráti már más baráti nem lehetnek.

javítom: user1_id, user2_id, dátum, stb.

Majd ezt kiíratni valahogy így kellene: Géza: baráti, József: baráti


De barát tábla helyett lehet akar kedvenc_szinei tábla is;

user_id, szín/megnevezés, hozzadva_datum, stb.

Így talán egyértelműbb.


Köszönöm, hogy figyelmeztettél!

2018. dec. 19. 14:36
 3/10 A kérdező kommentje:

#1 LEFT JOIN-nal valahogy így kellene? SELECT * FROM emberek LEFT JOIN kedvenc_szinei ON emberek.id = kedvenc_szinei.user_id?

PHP-ban így viszont nem tudom, hogyan lenne érdemes lekezelni. Ha mondjuk 2 színe van, akkor kétszer jelenik meg pl. az emberek.nev. Én úgy szeretném megjeleníteni, hogy egyszer jelenjen meg a neve (feltétel vizsgálat, dupla ciklus stb. nélkül). Ha ez lehetséges, akkor hogyan lenne célszerű?

2018. dec. 19. 17:03
 4/10 anonim ***** válasza:
Miért nehezebb kezelni a PHP-ban? Ugyanúgy egy lekérdezésből jönnek az eredményrekordok, nem?
2018. dec. 19. 18:43
Hasznos számodra ez a válasz?
 5/10 A kérdező kommentje:
Igen, egy lekérdezésből jönnek, de két rekordot kapok vissza, ha mondjuk 2 kedvenc színe van. És ekkor kétszer kapom meg a nevet (csak két különböző színnel). És arra nincs ötletem, hogy hogyan érjem el azt (lehet, hogy innentől kezdve PHP-ban kell megoldani), hogy egyszer jelenjen meg a név és az összes hozzátartozó szín. Ha csak a szín kellene, akkor értem, mert right join (a példában) és kész. De ebben az esetben fogalmam sincs, hiszen az összes nevet meg kell jelenítenem (azt is, ahol lehet, nincs megadva szín).
2018. dec. 19. 19:16
 6/10 anonim ***** válasza:
2018. dec. 20. 01:20
Hasznos számodra ez a válasz?
 7/10 anonim ***** válasza:
Hát tegnap nem írtam le, mert láttam, hogy írtad a uniont, és azt hittem, hogy már elvégezted a keresést, de a kérdésed egy részét az egérrel áthúztam a gugli mezőbe, rákattintottam a legelső találatra, és ott pont arról értekeznek, hogy lehet a duplikátumokat kezelni unionnal.
2018. dec. 20. 08:29
Hasznos számodra ez a válasz?
 8/10 A kérdező kommentje:

Szia! Köszönöm a választ! Megtettem a keresést, mielőtt kiírtam a kérdést. Az a gond (amennyiben jól értem), hogy ebben a megoldásban viszont php-ben split-elni kell majd. A kérdés második felét inkább úgy értettem, hogy ezzel a LEFT JOIN-os megoldással, hogyan tudnám lekezelni?

Egyébként találtam egy ilyen megoldást: [link] Ezzel viszont az a gond, hogy PDO és nem igazán értem, a kérdést pedig tanulási szempontból írtam ki. Azt értem, hogy itt tömbbe válogatja, nem a lekérdezésen belül a rekordnak a mezőjébe. Az is nagy segítség lenne, ha valaki eltudná magyarázni a logikáját ennek a megoldásnak (mármint nem az egész kódot, csak a függvényt, ami csoportosítja).

2018. dec. 20. 09:51
 9/10 A kérdező kommentje:

Illetve az a gond még az általam linkelt megoldással, hogy én ajaxosan, LIMIT-el darabokban kérdezem le (mint egy "load more button"). És ezért lehetséges, hogy mondjuk az első 6-nál még különböző lesz a "kedvenc_szinei.user_id", de a következő ajax kérésnél, azaz a 7-iktől már eltér.

Azaz az általam linkelt megoldás akkor lenne hasznos, hogyha egészben kérdezném le az összes adatot.

2018. dec. 20. 12:12
 10/10 anonim ***** válasza:
0%

Jó.

Tanulni könyvből, support oldalán, esetleg udemy. Erre senkinek nincs ideje, ha meg nem megy fizess meg evy hozzáértőt.

Mi nem szaladunk ilyen kérdésekkel senkihez, mellé ülűnk és utána olvasunk. Ne várd már a sült galambot, ráadásul nem is egy nehéz feladattal szórakozol nem értem miért nem megy.

2018. dec. 21. 03:00
Hasznos számodra ez a válasz?

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!