WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   [Hjälp]MySQL query (https://www.wn.se/forum/showthread.php?t=1044417)

PaLL3 2010-10-21 19:40

[Hjälp]MySQL query
 
Jag har en tabell som jag vill radera rader från.
Mitt problem är att jag vill kolla rader mot kolumner.

Så här långt har jag kommit, funkar dock ej:
Kod:

DELETE FROM entity_attributes WHERE itemid IN ( SELECT itemid FROM entity_attributes e WHERE (SELECT COUNT(*) FROM entity_attributes WHERE itemid = e.itemid AND attributeid = 280) = 1 AND (SELECT COUNT(*) FROM entity_attributes WHERE itemid = e.itemid AND attributeid = 276) = 1)
Tacksam för hilfe...

Jonas 2010-10-21 19:51

Du har gjort det onödigt komplicerat för dig.

Varför köra så många querys i samma fråga?
Det tar säkerligen längre tid än att göra det i separata frågor och loopa igenom det på serversidan, likaså otroligt mycket enklare att lösa problemen.

PaLL3 2010-10-21 21:05

Ok, får testa.
Tack för svar...

*EDIT*
Får det icke att funka.
Fattar inte problemet...

PaLL3 2010-10-21 21:46

Jag körde denna istället;
Kod:

$result = mysql_query("select itemid from entity_attributes e where(select count(*) from entity_attributes where itemid = e.itemid and attributeid = 280) = 1 and (select count(*) from entity_attributes where itemid = e.itemid and attributeid = 276) = 1");
while($row = mysql_fetch_array($result)) $list .= $row['ItemID'] . ',';
mysql_query("delete from entity_attributes where itemid in ($list)");

Funkade inte heller...

Jonas 2010-10-21 21:59

Citat:

Ursprungligen postat av PaLL3 (Inlägg 20374646)
Jag körde denna istället;
Kod:

$result = mysql_query("select itemid from entity_attributes e where(select count(*) from entity_attributes where itemid = e.itemid and attributeid = 280) = 1 and (select count(*) from entity_attributes where itemid = e.itemid and attributeid = 276) = 1");
while($row = mysql_fetch_array($result)) $list .= $row['ItemID'] . ',';
mysql_query("delete from entity_attributes where itemid in ($list)");

Funkade inte heller...


Kod:

$result = mysql_query("select distinct itemid from entity_attributes e where attributeid= 276 OR attributeid=280");
while($row = mysql_fetch_assoc($result))
$list[] = $row['itemid'];

mysql_query("delete from entity_attributes where itemid in (" . implode(',',$list) . ")");

Ser ingen skillnad i detta mot vad du komplicerat?

Clarence 2010-10-21 22:07

Citat:

Ursprungligen postat av PaLL3 (Inlägg 20374646)
Jag körde denna istället;
Kod:

$result = mysql_query("select itemid from entity_attributes e where(select count(*) from entity_attributes where itemid = e.itemid and attributeid = 280) = 1 and (select count(*) from entity_attributes where itemid = e.itemid and attributeid = 276) = 1");
while($row = mysql_fetch_array($result)) $list .= $row['ItemID'] . ',';
mysql_query("delete from entity_attributes where itemid in ($list)");

Funkade inte heller...

Och när du ser att det inte fungerar kan du testa att skriva ut queryn (generera den till en text-sträng innan den körs om du kör direkt mot mysql_) med felmeddelande (mysql_error()). Då skulle du se att din generering av query resulterar i en extra , på slutet. Använder du implode eller skapar specialfall för sista itereringen slipper du detta.

PaLL3 2010-10-21 22:23

Tack för hjälpen!
Och förklaringen! =)

PaLL3 2010-10-21 22:32

Sorry for dubbelpost men;
testade precis Jonas query.
Problemet var att den raderade precis ALLA rader som innhöll attributeID 280 och 276 där den egentligen bara skulle raderat raderna med attributID 280 som inte hade en matchande itemID med 276.
Alltså en rad består av kollumnamn itemID, attributID.
AttributID består enbart av 280 eller 276 men dessa ska ha samma itemID för att höra ihop.
Och om det enbart finns en rad med antingen ett attributID 280 eller 276 men med ett unikt itemID ska det raderas...

PaLL3 2010-10-22 11:42

Ok, nu har jag kommit så här långt, tack Magnus... ;)
Kod:


$dsn = 'mysql:dbname=DBNAME;host=localhost';
$dbUser = 'USER';
$dbPassword = 'PASSWORD';

$dbh = new PDO($dsn, $dbUser, $dbPassword);

$res = $dbh->prepare('select count(itemID) as count, itemID from entity_attributes group by itemID having count <2');
$res->execute();

$result = $res->fetchAll(PDO::FETCH_COLUMN, 1);
$test = implode(' ',$result);
print_r($test);
//mysql_query("delete from entity_attributes where count(itemid) in ($test)");

$dbh = null;

Den visar enskilda itemID's men tyvärr inte bara dom med attributeID 280 resp 276.

PaLL3 2010-10-22 13:50

Fick det att fungera.
Tack, återigen, Magnus för att du visade mig vägen...


Alla tider är GMT +2. Klockan är nu 15:24.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson