Sziasztok!
A következőre kérnék segítséget:
Van 2 adatbázis tábla (két külön adatbázisban).
Az 'A' tábla mail oszlopot tartalmaz, a 'B' tábla pedig mail és active oszlopokat.
Azt kellene megoldanom, hogy csak azokat az emaileket listázza ki az 'A' táblából, amik nincsenek a 'B' táblában sem aktív állapotban, se másképp.
Ti, hogy oldanátok ezt meg?
Íme a jelenlegi kód:
$stmt =$dbh->prepare('SELECT mail, status, created FROM tegyjot_commerce_order WHERE status="completed"');
$stmt ->execute();
$rows=$stmt->fetchAll();
$stmtwg =$dbhwg->prepare('SELECT mail, active FROM wg4_users');
$stmtwg ->execute();
$rowswg=$stmtwg->fetchAll();
Előre is köszönöm!
- 4198 megtekintés
Hozzászólások
Ha már úgyis leszeded kompletten a két táblát, miért nem teszed be egy közös db-be és oldod meg az egészet kódolás nélkül egy sql-lel?
- A hozzászóláshoz be kell jelentkezni
Feleslegesnek érzek +1 adatbázist emiatt létrehozni, ha PHP-val össze tudom kapcsolni valahogyan. Erre várnék ötleteket...
--
-- GKPortál Blog
Tégy Jót!
Legyen neked is Dropbox tárhelyed! :)
- A hozzászóláshoz be kell jelentkezni
Tehát A-ból kellene minden mail, ami nincs B-ben?
Jah és a két külön db egy gépen van vagy az teljesen külön?
- A hozzászóláshoz be kell jelentkezni
A php anyanyelvi szinten beszéli az asszociatív tömböket, amelyek egyik alapvető művelete a végigiterálás a kulcsokon, a másik annak ellenőrzése, hogy adott érték létezik-e kulcsként.
- A hozzászóláshoz be kell jelentkezni
ha egy szerveren van, es adott usernek van joga olvasni a tablakat, akkor sima join. select from db1.table1 join db2.table2 ...
--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!
- A hozzászóláshoz be kell jelentkezni
Egy NOT IN () vsz könnyebb.
- A hozzászóláshoz be kell jelentkezni
De lassabb. MySQL eseteben a subselect kb. halalos.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
Azt nem mondtad, hogy milyen méretűek az adatbázisok, bár ahogy nézem a jelenlegi kódot, most kb. mindent betolsz a memóriába és ott nézed. Ha ez esetleg már túl nagyra nőne, akkor lehet oszd-meg-és-uralkodj elven hash-t képezni a szövegekből, és mondjuk mindig csak az 'aa', 'ab', 'ac'... -val kezdődő hash-eket összehasonlítani.
--
#startup: Astro Teller: Mihez kezdjünk a nagy ötlettel?
- A hozzászóláshoz be kell jelentkezni
1) ha az elso query-ben csak a mail kell, felesleges a status-t is leszedned. Condition-ben hasznalhasz olyan fieldet is, amit amugy nem akarsz a resultsetben latni.
2) En azt csinalnam, hogy eloszednem a mailokat a db2-bol, osszerendeznem oket egy sima array-be, majd beadagolnam a db1-nek, valahogy igy:
$stmt = $dbhwg->prepare("SELECT mail FROM wg4_users WHERE active = 0");
$mails = array();
while($row = $stmt->fetch()) {
$mails[] = $row['mail'];
}
$stmt = $dbh->prepare("SELECT mail, status, created FROM tegyjot_commerce_order WHERE status = 'completed' AND NOT FIELD_IN_SET(mail, ?)");
$stmt->execute(implode(",", $mails));
A resultsetbol elo lehet szedni a hianyzo megrendeleseket.
A masik (mivel nekem van hatterinfom, en tudom, hogy valojaban mi ez, es ez csalas a tobbiekkel szemben, de ez van), hogy en inkabb onnet kozelitenem meg a kerdest, hogy a D8 commerce-ben az order akkor legyen completed, amikor atkerult a wg4_users-be, addig maradjon pending. Eleve, fizetes utan az pending lesz, ha jol emlekszem, mert a completed order statusz annak jelzesere vonatkozik, hogy a megrendeles teljesitve van. Logikailag pedig ebben az esetben az order akkor lesz completed, amikor a mail beszurasra kerul a wg4_users-be.
Ekkor az egesz leegyszerusodik arra, hogy le kell selectelni az osszes pending ordert.
PS: ha pedig a hirlevelre feliratkozas csak egy vegso allapot, akkor pedig kell egy koztes allapot is. Ehhez annyi hintet tudok adni, hogy a D8-ba fel lehet vinni plusz allapotokat az orderhez, es ekkor arra allitod at. Egy nem teljesen elrugaszkodott pelda az, amikor csomagot rendel valaki, akkor ugye a pending-bol nem rogton lesz complete, hanem elobb lesz shipping allapotja is neki.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
Remélem jól értem mit szeretnél:
select a.*
from wg4_users a
left join tegyjot_commerce_order b
on a.mail=b.mail
where b.mail is null
- A hozzászóláshoz be kell jelentkezni
Arra rájöttem a Ti segítségetekkel, hogy a where az én barátom, de sajnos így csak egy rakat üres tömböt kapok...
A kód: http://pastebin.com/S8BeyZ7e
Mit csinálok rosszul? :(
--
-- GKPortál Blog
Tégy Jót!
Legyen neked is Dropbox tárhelyed! :)
- A hozzászóláshoz be kell jelentkezni
A wg_users -es select -nel nem rakod idezojelbe a $row['mail'] -t. Az pedig fontos.
Ja, es SQL-nel szokj ra arra, hogy szimpla idezojelet hasznalunk belul, es az egesz query-t duplaba rakjuk. Ez foleg azert jo, mert akkor ki lehet hasznalni a valtozo-behelyettesitest is ( WHERE "mail = '{$row['mail']}'").
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
Szerintem a LEFT OUTER JOIN a bartátod. De te tudod. :)
Ha jól értem a kódrészletet(PHP?) így nem fog műküdni.
Ugyanis az egyik listából ki kellene törölni a másik litában lévő elemeket. Legalábbis az én olvasatomban.
- A hozzászóláshoz be kell jelentkezni