- HiFi műszaki szemmel - sztereó hangrendszerek
- Videószerkesztés
- NVIDIA GeForce RTX 4080 /4080S / 4090 (AD103 / 102)
- 5.1, 7.1 és gamer fejhallgatók
- Vezetékes FEJhallgatók
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- AMD Ryzen 9 / 7 / 5 7***(X) "Zen 4" (AM5)
- Házi barkács, gányolás, tákolás, megdöbbentő gépek!
- E-book olvasók
- ThinkPad (NEM IdeaPad)
Új hozzászólás Aktív témák
-
Sk8erPeter
nagyúr
-
Sk8erPeter
nagyúr
válasz
vakondka
#772
üzenetére
Szívesen, örülök, hogy segítettem.

Amúgy még annyi kimaradt, hogy a SELECT melletti felsorolásnál persze ne felejts el majd egyedi nevet adni a `products_name` mezőknek, hogy egyértelműen le tudd majd kérdezni mondjuk PHP-vel.
(csak példa: pdesc_4.`products_name` AS products_name_4)======
(#771) PazsitZ :
nekem most nem jut eszembe jobb/gyorsabb megoldás tárolt eljárással sem.
Mire gondolsz? -
PazsitZ
addikt
válasz
vakondka
#769
üzenetére
Elsőre ez ugrik be:
SELECT products_id, products_model, products_price, pd1.products_name, pd2.products_name, pd3.products_name
FROM products
LEFT JOIN products_description pd1 ON pd1.product_id = products.product_id AND language_id = 1
LEFT JOIN products_description pd2 ON pd2.product_id = products.product_id AND language_id = 2
LEFT JOIN products_description pd3 ON pd3.product_id = products.product_id AND language_id = 3;De biztos van szebb megoldás is, mondjuk PROCEDURE-t használva.
mod: Lemaradtam.

-
Sk8erPeter
nagyúr
válasz
vakondka
#769
üzenetére
Hali!
Szerintem legegyszerűbb megoldás INNER JOIN-olni újból ugyanazzal a táblával, az alábbi lekérdezést teszteltem is, nálam 0.0015 másodperc alatt lefutott:
SELECT
pr.`products_id`, pr.`products_model`, pr.`products_price`,
pdesc_1.`products_name`, pdesc_4.`products_name`, pdesc_5.`products_name`
FROM
`products` AS pr
INNER JOIN
`products_description` AS pdesc_1
ON pr.`products_id` = pdesc_1.`products_id`
AND pdesc_1.`language_id` = 1
INNER JOIN
`products_description` AS pdesc_4
ON pr.`products_id` = pdesc_4.`products_id`
AND pdesc_4.`language_id` = 4
INNER JOIN
`products_description` AS pdesc_5
ON pr.`products_id` = pdesc_5.`products_id`
AND pdesc_5.`language_id` = 5Itt a táblák neveit a JOIN-nál direkt úgy neveztem el, hogy beszédes legyen, tehát ha pl. a 4-es language id-vel JOIN-oltam, akkor pdesc_4 lett a JOIN-olt tábla neve.
Remélem erre gondoltál.
-
Lortech
addikt
válasz
vakondka
#643
üzenetére
Elnézést a szemétkedésért, nem kellett volna 6 sör után felnéznem a fórumra.

Viszont szerintem elég korrekt segítséget adtam, a konkrét megoldást nem szeretem beírkálni.
Akkor az előző hsz. helyesen így szólt volna: ha az operátornak nincsen tagadása, akkor miért ne tagadhatnád le a logikai kifejezést egy AND NOT-tal például? -
Lortech
addikt
válasz
vakondka
#637
üzenetére
Pedig nem hibás a stringek összehasonlítása, de nem árt tisztában lenni az operátorok definíciójával. Ha nincs kikötve a tábla definícióban, hogy az adott mező nem lehet null, akkor figyelembe kell venni, hogy a mezőt operandusként felhasználva, ha az null, milyen eredmények születhetnek. Más RDBMS-eknél is (Oracle-nél biztos) oda kell figyelni a null-okra, különben alattomos bugokat lehet bevinni.
Ha a ténylegesen NULL értéket és az üres stringet funkcionális szempontból egyenlőnek tekintheted (vagy kell tekintened), akkor a megoldásod működik, egyébként technikailag nem ugyanaz a kettő, és alkalmazástól függ, hogy külön kezelendő-e, az üres string plusz információ a NULL-hoz képest.
Van a mysql-nek NULL-safe equal operátora, a <=>, aminek a definícióját megnézheted itt:
[link].
Ez az egyik egy megoldás lehet, az előző bekezdés függvényében, a másik meg a concat helyett inkább az IFNULL függvény. [link] -
vakondka
őstag
válasz
vakondka
#636
üzenetére
Sikerült megtalálni a megoldást!

Gondoltam leírom, hátha valaki másnak is szüksége lesz rá egyszer.
Szóval a kiindulási helyzet, hogy az SQL parancsok nem képesek hibátlanul elvégezni stringek összehasonlítását, amennyiben az egyik string értéke NULL.
De van egy utasítás, ami képes úgy átalakítani a NULL értéket, hogy ezután az összehasonlítás helyes legyen: CONCAT_WS
Ez végül is sztringek összefűzésére való, de az én példámnál maradva látszik,
hogy az összefűző karakter egy olyan string ami nem tartalmaz egy karaktert sem és összefűzöm az adott mező értékével ami akár null is lehet, mert ha a NULL-t összefűzzük a semmivel, akkor az már nem NULL, vagyis össze lehet hasonlítani
SELECT p.products_model, p.products_price, pd.products_name, pd.products_description, pdo.products_description AS old_description, pd.language_id, p.products_last_modified
FROM products p, products_description pd, products_description_old AS pdo
WHERE pdo.products_id = pd.products_id
AND p.products_id = pd.products_id
AND pd.language_id = pdo.language_id
AND (
CONCAT_WS( '', pd.products_description ) != CONCAT_WS( '', pdo.products_description )
) -
RedAnt
aktív tag
válasz
vakondka
#340
üzenetére
Azzal semmi baj nincs, ld. [link] - SQL-92 szabvány, mysql támogatja.
emitter: ilyen hiba akkor van, amikor egy utf-8-ban kódolt 'é' karaktert iso-8859-1-ként próbálnak értelmezni, de ha a phpmyadmin és a böngésződ is utf-8-ra van állítva, akkor passz... Esetleg ellenőrizd, milyen content-type headert kapsz.
[Szerkesztve] -
Jester01
veterán
válasz
vakondka
#252
üzenetére
Jah, most meg fordítva van (azokat listázta amik angolul vannak csak)

A 4est és az 1est cseréld meg.
select count(*) from products_description t1 left join products_description t2 on t1.products_id = t2.products_id and t2.language_id = 1 where t1.language_id = 4 and t2.language_id is null;
+----------+
| count(*) |
+----------+
| 1618 |
+----------+ -
Jester01
veterán
válasz
vakondka
#250
üzenetére
Itt a javított verzió, most van mysqlem ki is tudtam próbálni:
select t1.products_id, t1.language_id from products_description t1 left join products_description t2 on t1.products_id = t2.products_id and t2.language_id = 4 where t1.language_id = 1 and t2.language_id is null
(A t1.language_id = 1 feltétel a join helyett a where részbe kell.) -
Jester01
veterán
válasz
vakondka
#246
üzenetére
Pl. saját magával összejoinolod a táblát, vhogy így:
select t1.products_id, t1.language_id from products_description t1 left join products_description t2 on t1.products_id = t2.products_id and t2.language_id = 4 and t1.language_id = 1 where t2.language_id is null
Most éppen nem jutok be mysqles gépre de talán jó
Új hozzászólás Aktív témák
- HiFi műszaki szemmel - sztereó hangrendszerek
- Gumi és felni topik
- Videószerkesztés
- Autós topik
- Hyundai, Kia topik
- droidic: Windows 11 önállóság nélküli világ: a kontroll új korszaka
- NVIDIA GeForce RTX 4080 /4080S / 4090 (AD103 / 102)
- Formula-1
- Kamionok, fuvarozás, logisztika topik
- Sorozatok
- További aktív témák...
- PATRIOT 32GB Viper Venom DDR5 6400MHz CL32 KIT PVV532G640C32K
- ÚJ ASUS CORE I5 14400F Gamer MAX PC 10X4.6GHz 32GB DDR5 1.0TB SSD NVIDIA RTX 3060TI 8GB DDR6 2ÉV GAR
- HP Z440 GAMER OPTIMUM WORKSTATION PC 4X3.6GHz 32GB DDR4 512GB SSD RTX 2060 6GB DDR6 WIN11 1ÉV GAR!
- Szupergyors Core i7 7700 FSC P757 TOWER SSD PC 4X4.0Ghz 16Gb DDR4 512Gb SSD DVD WIN11 1Év GARANCIA!
- DELL T3620 Precision Munka+játék PC 8X4.0GHz 16GB DDR4 512GB SSD QUADRO M4000 8GB DDR5 WIN11 1ÉV GAR
- Google Pixel 10 Pro XL Moonstone Super Actua 120 Hz, Pro kamera 5 zoom 256 GB Használt,Gari
- BESZÁMÍTÁS! ASROCK B550M R5 5600X 32GB DDR4 512GB SSD RTX 3060 Ti 8GB Zalman Z1 Plus CM 750W
- GYÖNYÖRŰ iPhone 11 Pro Max 64GB Midnight Green -1 ÉV GARANCIA -Kártyafüggetlen, MS3253,100% Akkumulá
- Jo Nesbo: LEOPÁRD (nem olvasott)
- Logitech Lift for MAC ergonomikus egér
Állásajánlatok
Cég: NetGo.hu Kft.
Város: Gödöllő
Cég: Promenade Publishing House Kft.
Város: Budapest









